您的位置:首页 > Web前端

剑指offer-斐波那契数列

2017-04-23 15:52 246 查看
斐波那契数列

                                      


#include <stdio.h>

long long Fibonacci(unsigned int n)
{
if(n<=0)
{
return 0;
}
if(n==1)
{
return 1;
}
return Fibonacci(n-1)+Fibonacci(n-2);

}

int main()
{
long long total=0;
int N;
scanf("%d",&N);
total=Fibonacci(N);
printf("%lld",total);
return 0;
}


                                        


                                       


#include <stdio.h>

long long Fibonacci(unsigned int n)
{
int result[3]={0,1,1};
if(n<=2)
{
return result
;
}
long long fibNMinusOne=1;
long long fibNMinusTwo=1;
long long fibN=0;
for(unsigned int i=2;i<n;++i)
{
fibN=fibNMinusOne+fibNMinusTwo;
fibNMinusTwo=fibNMinusOne;
fibNMinusOne=fibN;
}
return fibN;

}

int main()
{
long long total=0;
int N;
scanf("%d",&N);
total=Fibonacci(N);
printf("%lld",total);
return 0;
}

1-300项斐波那契数列:点击打开链接

相关:



                                  


                                 


                              


分析:

                        用Fib(n)表示青蛙跳上n阶台阶的跳法数,青蛙一次性跳上n阶台阶的跳法数为1(n阶跳),设Fib(0)=1;

                        当n=1时,只有一种跳法,即1阶跳:Fib(1)=1;

                       当n=2时,有两种跳的方式:Fib(2)=Fib(1)+Fib(0)=2;

                       当n=3时,有三种跳的方式:Fib(3)=Fib(2)+Fib(1)+Fib(0)=4;

                       当n=n时,有n种跳的方式,即Fib(n)=Fib(n-1)+Fib(n-2)+...+Fib(1)+Fib(0);

         因为Fib(n)=Fib(n)=Fib(n-1)+Fib(n-2)+...+Fib(1)+Fib(0);

                       Fib(n-1)=Fib(n-2)+...+Fib(1)+Fib(0);

         所以两式相减得:Fib(n)-Fib(n-1)=Fib(n-1)     ======》     Fib(n)=2*Fib(n-1)

         因此:Fib(n)=2^(n-1)

                                


                              
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: