关于递归:
递归的实现,使代码更加整洁清晰,但是当数据较大的时候,并不能体现出它的优点。
代码:
/** * @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秒之内得到。所以:使用递归的时候,应充分考虑到自己的程序所需要处理的数的大小,也就是递归的深度。
当然,某些时候,正确的使用递归也是可以得到惊喜的。