1. 程式人生 > >關於遞歸的一些思考

關於遞歸的一些思考

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秒之內得到。所以:使用遞歸的時候,應充分考慮到自己的程序所需要處理的數的大小,也就是遞歸的深度。

當然,某些時候,正確的使用遞歸也是可以得到驚喜的。

關於遞歸的一些思考