第5章 遞歸
1、遞歸的基本概念與遞歸程序設計
- 遞歸:直接或間接的調用函數自己
- 遞歸程序的兩個特色:
- 具有遞歸出口
- 在不知足遞歸出口的狀況下,把原問題分解成若干子問題,子問題的求解經過必定的方式修改參數進行函數自身調用加以實現
2、遞歸程序執行過程的分析
- 略
3、遞歸程序到非遞歸程序的轉換
- 遞歸程序和非遞歸程序的區別:相比較非遞歸程序,遞歸程序的空間需求和時間需求較高
3.1 簡單遞歸程序到非遞歸程序的轉換
- 簡單遞歸程序:自頂向下產生計算序列
- 非遞歸程序:利用遞推關係,自底向上產生計算序列
3.2 複雜遞歸程序到非遞歸程序的轉換
- 複雜遞歸程序到非遞歸程序的轉換:使用棧來記錄和管理所設置的回溯點,當求解沒法進行下去或當前處理的工做已經完成時必須退回到所設置的回溯點,繼續問題的求解
4、遞歸程序設計的應用實例(大綱未規定)
- 略
5、算法設計題
5.1 打印結果—1\n22\n333\n...(真題)(算法)
試編寫一個遞歸函數,以正整數 \(n\) 爲參數,該函數所實現的功能爲:在第 \(1\) 行打印輸出 \(1\) 個 \(1\),在第 \(2\) 行打印輸出 \(2\) 個 \(2\) \(,\cdots,\) 在第 \(n\) 行打印輸出 \(n\) 個 \(n\)。算法
print(int n) {
int i;
if (n != 0) {
print(n - 1);
for (i = 1; i <= n; i++) printf("%d", n);
printf("\n");
}
}
6、錯題集
- 略