剑指offer-斐波那契数列
2017-04-23 15:52
246 查看
斐波那契数列
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)
#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)
相关文章推荐
- 剑指offer:斐波那契数列
- [剑指offer]算法7 斐波那契数列
- 【剑指Offer】斐波那契数列及其延伸问题——JavaScript实现
- 【剑指Offer】斐波那契数列
- 剑指Offer之斐波那契数列
- 剑指offer——7.斐波那契数列
- 剑指offer--斐波那契数列
- 剑指offer面试题9 斐波那契数列及青蛙跳台阶问题
- 剑指offer 面试题9 斐波那契数列/青蛙跳台阶/矩形覆盖/变态跳台阶
- 剑指offer-斐波那契数列
- [牛客网,剑指offer,python] 斐波那契数列
- [牛客网,剑指offer,python] 斐波那契数列
- 【剑指offer】面试题9:斐波那契数列
- 剑指offer: 斐波那契数列
- 剑指offer:(7)递归和循环:斐波那契数列
- 剑指offer-算法题练习:part9 变态跳台阶-斐波那契数列问题
- 剑指Offer之斐波那契数列问题
- 【剑指Offer】007 斐波那契数列
- 剑指offer---斐波那契数列
- 剑指offer--斐波那契数列