剑指Offer-9-斐波拉契数列
来源:互联网 发布:java 去除换行符 编辑:程序博客网 时间:2024/05/20 09:24
递归实现+非递归实现
#include <iostream>using namespace std;//递归实现斐波那契数列 long long Fibonacci_Recursion(long long n) { if(n == 0) return 0; if(n == 1) return 1; return Fibonacci_Recursion(n - 1)+Fibonacci_Recursion(n - 2);}//非递归实现斐波那契数列long long Fibonacci(long long n){ if(n == 0) return 0; if(n == 1) return 1; int fibMinusOne = 0; int fibMinusTwo = 1; int fibN = 0; while( n >= 2) { fibN = fibMinusOne + fibMinusTwo; fibMinusOne = fibMinusTwo; fibMinusTwo = fibN; n--; } return fibN;}int main(int argc, char *argv[]){ cout<<Fibonacci_Recursion(3)<<endl; cout<<Fibonacci(3)<<endl; return 0;}
斐波拉契数列延伸:
1.青蛙跳台阶
一只青蛙一次可以跳一级台阶,也可以跳上两级。求该青蛙跳上一个N级台阶共有多少种跳法。
分析:由题意显然,f(1)=1,f(2)=2;当n>2时,第一次跳有两种不同的选择:一是第一种只跳1级,此时跳法数目等于后面剩下的n-1级台阶的跳法数目,即f(n-1),第二种是跳2级,此时跳法数目等于后面剩下的n-2级台阶的跳法,即f(n-2)。所以n级台阶的跳法为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的小矩形横着放在左上角的时候,左下角必须和横着放一个1*2的小矩形,并且右边区域剩余2*6的未覆盖区域即为f(6),所有f(8)=f(7)+f(6);显然,这也是一个斐波拉契数列。且f(1)=1,f(2)=2;
0 0
- 剑指Offer-9-斐波拉契数列
- 剑指offer-斐波拉契数列
- 剑指offer-面试题9.斐波拉契数列
- [剑指offer]Fibonacci数列
- 【剑指offer】面试题9:斐波那契数列
- 剑指offer 面试题9 斐波那契数列
- 剑指Offer:面试题9 斐波那契数列
- 剑指offer 面试题9 求Fibonacci数列
- 《剑指Offer》面试题9:裴波那契数列
- 剑指offer-9 斐波那契数列
- 剑指offer-面试题9:斐波那契数列
- 剑指offer第9题:斐波纳西数列
- 剑指offer 面试题9:斐波那契数列
- 【剑指offer】面试题9:斐波那契数列
- 剑指offer面试题9:裴波那契数列
- 剑指offer--面试题9:斐波那契数列
- 剑指offer:面试题9,斐波那契数列
- 剑指Offer---面试题9:斐波那契数列
- iOS开发缺少framework对应错误提示
- Foundation/Foundation.h 是什么东西?
- Android Volley的使用
- android研发面试经验
- noip2010 引水入城 (bfs染色+贪心)
- 剑指Offer-9-斐波拉契数列
- NSLog和print使用的差异
- Hbase1.1.2创建table
- 收藏的博客[C++]
- C语言中整型变量的互换方法总结
- Jenkins 学习资料
- Java web开发快速上手
- kvm随笔系列三: Qemu/kvm虚拟化相关开发组件
- SQL_SERVER数据库操作