LintCode(1):递归、斐波那契
来源:互联网 发布:encode url php 编辑:程序博客网 时间:2024/05/16 02:34
在了解了Java的虚拟机内存模型后,就理解了方法调用的过程。
方法调用:就是将参数、局部变量等信息压入Java方法栈中,因此,随着方法调用深度增加,方法栈也会越来越深。
一:用递归方式实现斐波那契数列,这种方式由于大量重复计算,会导致效率极低。
//递归方式实现斐波那契public int fibonacciByRecursion(int n) {if(n==1){//递归的结束条件return 0;}else if(n==2){//递归的结束条件return 1;}else if(n>2){//递归的本质就是自我调用,不断分解问题return fibonacciByRecursion(n-1)+fibonacciByRecursion(n-2);}else{//如果输入小于1的整数,则输出0return 0;}}
二:用递推实现斐波那契,效率较高。
public int fibonacciByCircle(int n){//表示第一个数和第二个数,这是初始条件int i=0,j=1,sum=0;if(n<=2){return n-1;}else{//开始循环for(int k=3;k<=n;k++){//求出这次循环的结果 sum=i+j;//为下一次循环更新数据i=j;j=sum;}return sum;}}
三:用尾递归实现斐波那契,效率接近递推,这种方式不会耗费大量栈内存,只会耗费固定内存,而且没有重复计算,本质与递推类似
//尾递归方式实现斐波那契public int fibonacciByTailRecursion(int n,int i,int j) {if(n==1){//递归的结束条件return i;}else if(n==2){//递归的结束条件return j;}else if(n>2){//每次n减1就是运算一次,然后更新i和j,这里的计算和参数共同构成迭代return fibonacciByTailRecursion(n-1,j,i+j);}else{//如果输入小于1的整数,则输出0return 0;}}
0 0
- LintCode(1):递归、斐波那契
- LintCode之斐波那契数列
- lintcode斐波那契数列
- Lintcode:斐波那契数列
- 【LintCode】查找斐波那契数列中的N个数
- lintcode爬楼梯(斐波那契数列)
- 递归算法1-斐波那契数列
- JAVA斐波那契递归算法
- 斐波那契的递归算法
- 斐波那契数列-递归实现
- 斐波那契非递归解法
- 斐波那契 非递归方法
- 递归特例-斐波那契数列
- 斐波那契数列递归源码
- 非递归斐波那契
- 递归求解斐波那契数列
- 递归-求解斐波那契数列
- 关于斐波那契数列递归
- nodejs下载网络资源的三种方法写入数据
- hdu5211Mutiple+数论
- 51单片机总结
- 新公司一个月了
- EasyDarwin云存储方案调研:海康萤石云采用的是MPEG-PS打包的方式进行的存储
- LintCode(1):递归、斐波那契
- 1-4.Hadoop安装配置-伪分布式(Hadoop系列day01)
- Linux内存管理之mmap详解
- java中堆区和栈区的理解
- NOIP水题(1)——信息传递
- 安卓实现水波纹动画效果
- 人格魅力的六法宝
- Android28--Android之Android的通知(Notification)使用详解
- Handler的用法介绍