C語言中遞迴詳解

2021-08-19 15:55:31 字數 1061 閱讀 8373

編寫乙個簡單的cheng函式,輸入的b全為數值5。

第一種情況:

1 #include2 int cheng(int a)

3 10 return a;

11 }

12 13 int main()

14

這種情況會輸出:

2624

120120

為什麼會產生這樣的結果?

首先我們要明白,函式在未完成自己的計算之前,是無法被呼叫的。所以在做遞迴運算時,實際上是從最後乙個值開始計算的,而不是我們所輸入的初始值5。所以,當a=1的時候,不會進入到 if 裡面去,程式會直接把 1 傳遞給上乙個cheng(a-1),上乙個a=2*1=2會直接列印出來,然後傳遞給上一層,a=3*2=6會被列印,然後再是a=4*6=24,最後是a=5*24=120被列印出來。

接下來我們做一些簡單的改變(以下改變均在初始程式上進行改變,不疊加):if(a>1)改為if(a>=1)。

000

000

輸出結果為6個0;因為當a=0能夠進入if後,第一層就變為a=a*0=0,一直往上面傳遞,a的值會一直不變為0。

把if(a>1)改為if a(>2),產生的結果為:

6

24120

120

只輸出4個數,因為a=2不進入if,第一層為a=3*2=6依次往上傳遞。

把if後面的{}去掉,讓if只控制一條程式。此時輸出的結果為:

126

24120

120

這種情況下,雖然a=1不進入if,但是它能被輸出來。

把return a改為return 10這時的輸出結果是:

20

3040

5010

為什麼會產生這樣的結果,首先,我們要明白,return返回的是函式的值,並不是改變a的值,所以最後輸出的c為10。在cheng這個函式之中,第一層,a=2;a=a*10=20;上一層30;然後分別是40,50。

C語言中的遞迴

遞迴就是乙個函式在它的函式體內呼叫它自身。執行遞迴函式將反覆呼叫其自身,每呼叫一次就進入新的一層。直到某一條件跳出!例1 計算5的階乘 例2 include 定義獲取單詞數量的函式 int getwordnumber int n else int main 例3 猴子第一天摘下n個桃子,當時就吃了一...

C語言中遞迴和排列組合詳解

目錄 1.列印n個數的全排列 2.列印n個數中任意m個數的全排列 3.列印n個數中任意m個數的組合 這個題實際上是可以直接用stl中的next permutation 函式,如下 include using namespace std int main sort data,data 4 先排序得到字...

C語言中 enum詳解

note 儘管乙個列舉常量占用4個位元組,恰好和int型別占用的位元組數相同,通過sizeof操作符求得,但enum型別和int型別並不等價,將int型別的整數賦值給enum變數時,需要進行強制型別裝換。因為列舉型別是一種基本資料型別,而不是一種構造型別,所以不能把這些列舉常量說明為整形,字元型或其...