• 递归算法——求取斐波那契数列(2)


    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);
            }
    
        }
    }
  • 相关阅读:
    cron表达式详解(转载)
    Swagger 3.0使用教程(转载)
    springboot整合shiro-对密码进行MD5并加盐处理(十五)(转载)
    redis排序
    引用和指针的区别?
    测试策略
    主键、外键的作用,索引的优点与不足?
    您所熟悉的软件测试类型都有哪些?请试着分别比较这些不同的测试类型的区别与联系(如功能测试、性能测试……)
    UI测试测什么
    数据库,数据库管理系统,数据库系统三者的区别和练习?
  • 原文地址:https://www.cnblogs.com/mingcaoyouxin/p/3842112.html
Copyright © 2020-2023  润新知