zoukankan      html  css  js  c++  java
  • 关于递归的一些思考

    关于递归:

    递归的实现,使代码更加整洁清晰,但是当数据较大的时候,并不能体现出它的优点。

    代码:

    /**
     * @fuction  
     * @author mly11
     * @date 2017年3月16日
     * @time 下午7:46:39
     */
    public class Recursion {
        public static void main(String[] args) {
            int x = 30;
            System.out.println(rec(x));
    
            System.out.println("----------------------------------");
            double y = Math.pow(1.618033988745, x);
            System.out.println(0.4472135955*y);
    
            System.out.println("------------------------------------");
    //        斐波那契数列通式:  记: m^2=5  
    //        则通式为:F(n) = ( 1/m) * ( ( (1+m)/2 )^n - ( (1-m)/2 )^n );
            double m = Math.sqrt(5);
            double z = (1/m)*(Math.pow(((1+m)/2), x) - Math.pow(((1-m)/2), x));
            System.out.println(z);
            
    //        当n=30的时候,结果为:
    //            832040
    //            ----------------------------------
    //            832039.9999248054
    //            ------------------------------------
    //            832040.0000000008
        }
    //    使用递归计算
        public static int rec(int x){
            if(x == 1){
                x = 1;
            }else if(x == 2){
                x = 1;
            }else{
                x = rec(x-1) + rec(x-2);
            }
            return x;
        }
    }

    以上代码中,当x为50的时候,我的电脑就需要处理很长时间(从来都是没出来结果,就手动停掉了,哈哈),而剩下的两种方式计算(使用到了高数里的一些特征根和特征方程的知识),数字很大的时候,也可以在1秒之内得到。所以:使用递归的时候,应充分考虑到自己的程序所需要处理的数的大小,也就是递归的深度。

    当然,某些时候,正确的使用递归也是可以得到惊喜的。

  • 相关阅读:
    20191024-1 每周例行报告
    20191017-1 每周例行报告
    20191010-2 每周例行报告
    梁梦瑶 20190919-4 单元测试
    交换机配置VLAN Cisco packet
    20191128-1 总结
    20191121-1 每周例行报告
    20191114-1 每周例行报告
    对组内成员的感谢博客
    每周例行报告
  • 原文地址:https://www.cnblogs.com/moly/p/6830297.html
Copyright © 2011-2022 走看看