C語言 遞迴入門

2021-09-14 00:27:04 字數 1338 閱讀 2335

遞迴是什麼,遞迴就是一種解決問題的方法——程式自身呼叫自身叫做遞迴。它的核心在於:大事化小!!!

先舉幾個例子:

1.接受乙個整型值,按順序列印它的每一位。(只考慮正數)

如:1234  ----應輸出1  2   3   4

(1)先討論如果不遞迴該怎樣處理,一般步驟是這樣的,先判斷這個數是幾位數,然後在記錄下這個數的每一位,最後輸出。我們想想,首先判斷這個數的位數的時候就得建立臨時變數進行迴圈,而後再動態建立乙個陣列來記錄這個數的每一位。

(2)但是遞迴的話就不用這樣複雜了,我們要做的是要讀取它的每一位,那這個函式的工作就只是讀取它的每一位即可。只要注意遞迴的邊界就行。

上**:

void num(int n) 

printf("%d ", n % 10);

}

就這短短幾行就可以解決問題了。

2.不建立臨時變數求字串的長度

(1)還是先來看看建立臨時變數是如何做到的:建立臨時變數來記錄字串的長度,進入迴圈遍歷該字串。

(2)不建立臨時變數時,我們可以考慮到遞迴。先看**:

int lenth(const char* str)

return 1+lenth(str + 1);

}

分析:

①字串的結束條件就是遇到'\0',這就是遞迴的邊界。

②接下來只要考慮這個函式的目的是為了幹嘛就行,該函式是為了求字串長度,那麼如果字串沒結束就返回當前所計算的字串的長度加1就行。

3.求乙個數的階乘:num!

(2)遞迴:先上**:

int fac(int num) 

return num * fac(num - 1);

}

分析:

①同樣遞迴的邊界先搞清楚:當是1的時候就跳出。

②接下來只考慮該函式的功能即可,只要不是1,就返回num*(num-1)!,這樣就明晰了很多。

1.遞迴的核心思想就是大事化小。

2.先考慮遞迴的邊界,要確保遞迴能跳出,不然就會進入死迴圈。(一定會用if語句來進行分支,或者說判定是否要結束遞迴)

3.不要細想遞迴的內容,只想該函式的功能即可。

遞迴入門自學

例題 計算給定的n個數的和 分析 顯然當n 0的a 0 為所求,因此可以將前n項可以看做是前n 1 即 a 0,n 2 項的和加上第n項 int sum int a,int n 如上演算法中的sum 在進行遞迴呼叫的時對自身的呼叫最多隻會進行一次,也就是在每一層次上至多只有乙個例項,且構成乙個線性結...

C語言 遞迴入門 漢諾塔問題

在定義乙個過程或函式時,出現呼叫本過程或本函式的成分稱為遞迴 如果乙個遞迴過程或函式中的遞迴呼叫語句是最後一條執行語句,則稱這種遞迴呼叫為尾遞迴 例如 計算階乘函式 intf int n else return f n 1 n 遞迴解決問題應滿足三個條件 需要解決的問題可以轉化為乙個或多個子問題求解...

《遞迴入門》之回文

所謂回文字串,就是乙個字串,從左到右讀和從右到左讀是完全一樣的。比如 level aaabbaaa 題目 判斷乙個字串是否為回文 解法 遞迴 遞迴的作用在於把問題的規模不斷縮少,直到問題縮少到能簡單地解決 問 如何縮少問題規模?答 通過觀察可以知道,乙個回文字串其中內部也是回文。所以,我們只需要以去...