面试题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;
}
结果如下: