某些函式的遞迴與非遞迴實現的比較

2021-07-11 06:18:47 字數 844 閱讀 2314

1.斐波那契數列實現~

遞迴實現:

int fib(int n)

非遞迴(迭代法)實現:
int fib(int n)

return num1;

}

從以上兩種實現方法我們可以看出,遞迴**比非遞迴簡單很多~不過,你是否知道遞迴背後的故事~如果我們要計

算第40個斐波那契數,計算機需要計算很多次:每個遞迴呼叫都觸發另外兩個遞迴呼叫,而這倆個遞迴呼叫又將

觸發遞迴呼叫。當我們計算fib(10)時,fib(3)被呼叫了21次,這個數目你可以在紙上推導。開銷太大。

所以,從時間和空間複雜度來看,還是非遞迴的好一些~

2.字串逆序~

非遞迴實現:

void reverse(char *left, char *right)

}

遞迴實現:
void reverse_string(char* str)

}

分析:非遞迴實現方法比遞迴好很多,非遞迴**簡單易懂,遞迴**實現原理:當字串長度大於1,遞迴起來

,將第乙個字元放到臨時開闢的空間,最後乙個字元放在第乙個字元的位置,然後把原本放最後乙個字元的位置清

為結束符,當遞迴結束時,把臨時區的變數放在所謂的字串的結尾~

部分函式的遞迴與迭代(非遞迴)實現

1 1 2 3 5 8.這樣的數列叫做斐波那契數列,規律很簡單,前兩個數字的和就是第三個數字的值。我們可以簡單表示為 n 2 fib n fib n 1 fib n 2 fib n n 2 fib n 1 遞迴的實現 也是比較簡單的 只需要函式不斷呼叫自身就可以了 define crt secure...

Ackermann函式的遞迴與非遞迴演算法

折騰了我將近一周了,沒查到能實際應用的程式 只好自己魔改 ifndef pch h define pch h 科普 阿克曼函式 ackermann 0,n n 1 ackermann 1,n n 2 ackermann 2,n 2 n 3 ackermann 3,n 2 n 3 3 include ...

Fibonacci數列的遞迴與非遞迴實現

fibonacci 斐波那契 數列定義 1 遞迴實現 思想簡單,無需贅述,實現如下 遞迴方法複雜度o 2 n 計算到n 41已達到計算機的極限 int f int n int fibonacci1 int len 該方法存在很多重複計算,雖然是典型的遞迴,但效率很低,資源消耗大。經分析,改演算法時間...