剑指Offer9斐波那契数列
来源:互联网 发布:女生适合网络还是软件 编辑:程序博客网 时间:2024/06/14 16:43
题目:
写一个函数,输入n,求斐波那契数列的第n项。
f(0) = 0;
f(1) = 1;
f(n) = f(n-1)+f(n-2);
方法1:
递归实现
long long Fibonacci(unsigned int n)
{
if(n<=0)
return 0;
if(n==1)
return 1;
return Fibonacci(n-1)+Fibonacci(n-2);
}
{
if(n<=0)
return 0;
if(n==1)
return 1;
return Fibonacci(n-1)+Fibonacci(n-2);
}
方法2:
循环实现,并且不用数组来记录每一个值,只要记录最后两个变量就可以
代码:
long long FibonacciFangFa2(unsigned int n)
{
if(n <= 0)
return 0;
if(n==1)
return 1;
long long one = 1;
long long two = 0;
long long num = 0;
for(int i= 2;i<=n;i++)
{
num = one + two;
two = one;
one = num;
}
return num;
}
{
if(n <= 0)
return 0;
if(n==1)
return 1;
long long one = 1;
long long two = 0;
long long num = 0;
for(int i= 2;i<=n;i++)
{
num = one + two;
two = one;
one = num;
}
return num;
}
相关扩展题目:
1,上台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级台阶总共有多少种跳法。
分析:
如果是n级台阶当成是f(n),当第一次跳一级台阶,那么后面的n-1级台阶就有f(n-1),如果第一次跳了2级台阶,那么后面还剩n-2级台阶就有f(n-2)。所以
f(n) = f(n-1)+f(n-2)
2.覆盖地砖
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形,问:用8个2*1的小矩形无重叠地覆盖一个2*8的大矩形,总共有多少种方法?
分析:
先把2*8的覆盖方法记为f(8),用第一个1*2的小矩形去覆盖大矩形的最左边时有两个选择,竖着放,或者横着放。当竖着放的时候,右边还剩下2*7的区域,这种情况下的覆盖方法就是f(7),当用两个1*2横着放,覆盖最左边的的大矩形的时候,右边还剩下2*6的区域,这种情况下的覆盖方法就是f(6).所以:
f(n) = f(n-1) + f(n-2)
0 0
- 剑指Offer9斐波那契数列
- 剑指offer9:Fibonacci数列
- 斐波那契数列数列计算
- 【剑指offer】斐波那契数列
- 剑指offer--斐波那契数列
- 剑指Offer-斐波那契数列
- 剑指offer:斐波那契数列
- 《剑指offer》斐波那契数列
- 剑指 offer:斐波那契数列
- 【剑指Offer】斐波那契数列
- 剑指offer7 斐波那契数列
- 剑指offer 斐波那契数列
- 【剑指offer】斐波那契数列
- 剑指offer 斐波那契数列
- [剑指offer]斐波那契数列
- 剑指offer06--斐波那契数列
- 剑指offer|斐波那契数列
- 【剑指offer】斐波那契数列
- 大数据处理学习之 垃圾邮件判定1
- 01_hibernate快速预览demo
- Get URL parameters & values with jQuery
- php封装xml操作类
- HDU1217 Arbitrage 【SPFA】
- 剑指Offer9斐波那契数列
- log4j.perproties配置
- PO,VO,TO,BO,DAO,POJO
- HTTP服务七层架构技术探讨
- USACO Fencing the Cows 解题报告
- HiHo 1000 A+B
- AWT于Swing
- jquery实现checkbox全选,反选,取消选择
- 统治世界的十大算法