遞迴按照遞迴方式可以分為直接遞迴和間接遞迴
1. 直接遞迴
遞迴過程p直接呼叫自己
2. 間接遞迴
p包含另乙個過程d,而d又呼叫p
遞迴例項:
1. 漢諾塔問題
#include #include void hanoi(int n, char a, char b, char c)
}int main(void)
2. 八皇后問題
問題分析:
每乙個點的行、列和兩條對角線都不能造成衝突
(1)當每行被占領後,把相應的標誌位置1,列也一樣。
(2)對角線有兩個方向,同乙個對角線上的所有點(下標為(i, j)),那麼(i+j)和(i-j都不能再被占用領)c[i+j]=1表示第(i+j)個對角線被占領,為0是代表為沒有被占領,d[i-j]=1代表d[i-j]被占領。
#include #include int a[8], b[24], c[24], d[24];
void print(void)
void try(int i)
}}int main(void)
try(1);
return 0;
}
3. 遞迴求乙個陣列的元素最大值
#include #include int max(int arr, int len)
int main(void)
x = max(a, n);
printf("%d\n", x);
return 0;
}
4. 遞迴逆序輸出乙個字串
#include #include void reverse(void)
}int main(void)
遞迴演算法學習
所謂的遞迴函式就是在函式體內呼叫本函式。使用遞迴函式一定要注意,處理不當就會進入死迴圈。遞迴函式只有在特定的情況下使用 比如階乘問題 遞迴演算法測試 10的階乘 function f num else console.log 10 的結果為 f 10 請實現乙個fibonacci函式,要求其引數和返...
演算法學習筆記 遞迴
漢諾塔問題 有種說法我覺得很好,所謂遞迴,就是利用大道至簡的思想,把乙個大的複雜的問題層層轉換為乙個小的和原問題相似的問題來求解的這樣一種策略。優點缺點 遞迴給人的感覺是驚豔,它往往能給我們帶來非常簡潔非常直觀的 形勢,從而使我們的編碼大大簡化。效率往往很低,費時和費記憶體空間。在遞迴呼叫的過程當中...
演算法學習1 遞迴
遞迴 乙個函式呼叫其自身。不同名字空間上的迴圈。注意 使用遞迴策略時,必須有乙個明確的遞迴結束條件,否則遞迴將會無限進行下去。參考 中國大學mooc 演算法基礎 話歪之地的部落格 int factorial int n else 執行f 3 2 f 3 5 f 2 2 f 2 5 f 1 2 f 1...