1. 程式人生 > 實用技巧 >第5章 遞迴

第5章 遞迴

第5章 遞迴

目錄

一、遞迴的基本概念與遞迴程式設計

  1. 遞迴:直接或間接的呼叫函式本身
  2. 遞迴程式的兩個特點:
    1. 具備遞迴出口
    2. 在不滿足遞迴出口的情況下,把原問題分解成若干子問題,子問題的求解通過一定的方式修改引數進行函式自身呼叫加以實現

二、遞迴程式執行過程的分析

三、遞迴程式到非遞迴程式的轉換

  1. 遞迴程式和非遞迴程式的區別:相比較非遞迴程式,遞迴程式的空間需求和時間需求較高

3.1 簡單遞迴程式到非遞迴程式的轉換

  1. 簡單遞迴程式:自頂向下產生計算序列
  2. 非遞迴程式:利用遞推關係,自底向上產生計算序列

3.2 複雜遞迴程式到非遞迴程式的轉換

  1. 複雜遞迴程式到非遞迴程式的轉換:使用棧來記錄和管理所設定的回溯點,當求解無法進行下去或當前處理的工作已經完成時必須退回到所設定的回溯點,繼續問題的求解

四、遞迴程式設計的應用例項(大綱未規定)

五、演算法設計題

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");
    }
}

六、錯題集