關於遞歸的一些思考
阿新 • • 發佈:2017-05-09
log 它的 sta 數列 自己的 rec system stat 0.00
關於遞歸:
遞歸的實現,使代碼更加整潔清晰,但是當數據較大的時候,並不能體現出它的優點。
代碼:
/** * @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秒之內得到。所以:使用遞歸的時候,應充分考慮到自己的程序所需要處理的數的大小,也就是遞歸的深度。
當然,某些時候,正確的使用遞歸也是可以得到驚喜的。
關於遞歸的一些思考