剑指offer 面试题9



面试题9:斐波那契数列

题目一:写入一个函数,输入n,求斐波那契切数列的第n项。

题目二:一只青蛙一次可以跳上一级台阶,也可以跳上两级台阶,求该青蛙一次跳上一个n级的台阶总共有多少种跳法。

首先我们来看第二题,我们可以假设有一个台阶,青蛙跳法:1种;

                                    有两个台阶,青蛙跳法:2

                                    有三个台阶,青蛙跳法:3

                                    有四个台阶,青蛙跳法:5

                                    有五个台阶,青蛙跳法:8

从青蛙跳台阶的种数来看,它构成了一组斐波那契切数列,因此我们需要求斐波那切数列的第n项。问题又回到了第一题。

在学校我们学习斐波那切数列时都是使用的是递归算法,此办法虽然简单,但递归算法本身就是调用栈,因此当使用这个算法来解决此问题时,不但产生栈桢的开辟,浪费了很多空间,并且时间和效率都很低。

因此我们因该使用循环来解答此题

代码如下:

#include<stdio.h>

 

int Fibonacei(int n)

{

    int f1=1;

    int f2=1;

    int f3=0;

 

    for(int i=3; i<=n; i++)

    {

       f3=f1+f2;

       f1=f2;

       f2=f3;

    }

    return f3;

}

 

int main()

{

    int a=3;

    int f=Fibonacei(a);

    printf("%d\n",f);

 

    int b=5;

    int g=Fibonacei(b);

    printf("%d\n",g);

 

    int c=6;

    int h=Fibonacei(c);

    printf("%d\n",h);

 

    return 0;

}

 

结果如下:

猜你喜欢

转载自blog.csdn.net/YanJing1314/article/details/79433585