斐波那契数列及系列问题
来源:互联网 发布:可爱p图软件 编辑:程序博客网 时间:2024/05/17 07:10
斐波那契数列,即 0,1,1,2,3,5,8...,从第三个数开始,数值为前两个数之和。对于该数列,求解第n项只需要通过迭代即可完成。
public class Solution { public int Fibonacci(int n) { int left=0,right=1,result=0; if(n<0) return -1; else if(n==0) return 0; else if(n==1) return 1; else{ for(int i=2;i<=n;i++){ result = left + right; left = right; right = result; } return result; } }}从理解上来说,由数列的性质可以看出f(n)=f(n-1)+f(n-2),因此还可以递归求解。
public class Solution { public int Fibonacci(int n) {if(n<0) return -1; else if(n==0) return 0; else if(n==1) return 1; else return Fibonacci(n-1)+Fibonacci(n-2); }}不过,通过递归求解会导致一系列的问题,首先就是其无法求解n较大的情况,当n较大时,会导致栈溢出。然后就是效率低下的问题。显然第一种求解方式更加合适。
虽然该递归求解的方法存在着不足,这种递归的思想却是有助于对很多问题进行求解。例如跳台阶问题,矩形覆盖问题:
跳台阶问题:一只青蛙一次可以跳一级台阶,也可以跳两级台阶。问跳上n级台阶有多少种跳法?
这个问题可以用递归的思想求解。由于青蛙一次只能跳一级或二级台阶,因此对于n级台阶的跳法f(n),f(n)=f(n-1)+f(n-2),由此可以通过求解斐波那契数列第n项的方法来求解。
矩形覆盖问题:用n个2*1的小矩形覆盖1个2*n的大矩形,求有多少种覆盖方法?
这个问题同理,对于n等于1与2来说,很容易求解出答案分别为1与2。因此从n>2开始,对于n=i且i>2,由于i与i-1相比只多了一个2*1,因此n=i时所包含的解的数量包括了n=i-1的解的数量;除此之外,由于n>2,存在着两个矩形并排竖着排列的情况,因此n=i的解还应当包含n=i-2的解,即n=i-2的每个解都在最上端添加两个竖着的小矩形这种情况,所以f(i)=f(i-1)+f(i-2);
阅读全文
0 0
- 斐波那契数列及系列问题
- 斐波那契数列系列问题
- poj 1953 World Cup Noise[斐波那契数列](递归及递推问题系列)
- 斐波那契数列及相关问题
- 斐波那契数列及青蛙跳台阶问题
- 斐波那契数列及青蛙跳台阶问题
- 斐波那契数列及青蛙跳台阶问题
- 斐波那契数列及相关问题
- 斐波那契数列问题
- 斐波那契数列问题
- 斐波那契数列{大数问题}
- 斐波那契数列问题
- 兔子问题(斐波那契数列)
- 斐波那契数列-台阶问题
- 兔子问题--斐波那契数列
- 斐波那契数列问题
- FizzBuzz问题&&斐波那契数列
- 斐波那契数列问题汇总
- Oracle之数据泵
- netcdf流场展示
- android自定义异常日志收集器
- openvswitch使用手册
- python分布式rpc框架zerorpc安装及使用教程
- 斐波那契数列及系列问题
- 集合操作
- JQuery(1)
- Spring AOP 四大通知
- 第一个HTML程序
- ImageView中XML属性src和background的区别
- 数据仓库概述
- dll的def文件与__declspec(dllexport)导出函数方式比较
- Linux下安装chromium