递归算法——求取斐波那契数列(2)
2014-07-14 09:49
801 查看
import java.util.Scanner; /** * Created by Administrator on 14-5-13. * 改进的计算斐波那契数列的方法,利用参数,经过测试运行时间会成倍减少 测试数据n=40 * 尾递归的本质是:将单次计算的结果缓存起来,传递给下次调用,相当于自动累积。 * 尾部递归是一种编程技巧。递归函数是指一些会在函数内调用自己的函数, * 如果在递归函数中,递归调用返回的结果总被直接返回,则称为尾部递归。 * 尾部递归的函数有助将算法转化成函数编程语言, * 而且从编译器角度来说,亦容易优化成为普通循环。 * 这是因为从电脑的基本面来说,所有的循环都是利用重复移跳到代码的开头来实现的。 * 如果有尾部归递,就只需要叠套一个堆栈,因为电脑只需要将函数的参数改变再重新调用一次。 * 利用尾部递归最主要的目的是要优化,例如在Scheme语言中,明确规定必须针对尾部递归作优化。 * 可见尾部递归的作用,是非常依赖于具体实现的。 */ public class Fib1 { public static void main(String[] args){ long startTime=System.currentTimeMillis(); //获取开始时间 int number=0; System.out.println("please give the number:"); Scanner scanner=new Scanner(System.in); String str=scanner.nextLine(); try{ number=Integer.parseInt(str); }catch(NumberFormatException e){ System.out.println("输入有误"); } System.out.println(fac(number,1,1)); long endTime=System.currentTimeMillis(); //获取结束时间 System.out.println("程序运行时间: "+(endTime-startTime)+"ms"); } public static int fac(int temp,int f1,int f2){ if(temp<2) { return f1; } else { System.out.println("fac("+(temp-1)+' '+f2+','+(f1+f2)+")"); return fac(temp-1,f2,f2+f1); } } }
相关文章推荐
- 递归算法——求取斐波那契数列(1)
- 斐波那契数列递归算法和非递归算法实现
- 递归算法:斐波那契数列延伸拓展
- 斐波那契数列 -- 递归算法(-)
- 【递归算法】 斐波那契数列的备忘录优化
- 数据结构_递归算法_斐波那契数列
- 数据结构6:斐波那契数列,递归算法,求和算法专题
- 斐波那契数列的递推和递归算法
- 用递归算法求斐波那契数列的第N项值
- 斐波那契数列递归算法和非递归算法
- 斐波那契数列 递归算法
- 【数据结构】递归算法—斐波那契数列
- 递归算法之斐波那契数列的求项与求和算法
- 使用递归算法求1,1,2,3,5...斐波那契数列第N个数的值
- 递归算法-阶乘-斐波那契数列
- 斐波那契数列的递归算法与非递归算法
- 以斐波那契数列为例分析递归算法的时间复杂度和空间复杂度
- (Java)用递归算法实现斐波那契数列
- C语言递归算法系列_尾递归求阶乘和斐波那契数列(5)
- 递归算法计算斐波那契数列的第30个数