-
重要的是,遞迴函式至少有乙個它肯定會返回的出口,否則它將巢狀在無限迴圈中,直到堆疊溢位。 修改如下:
void fun (int n)
static int sum=0;
sum+=n%10;
if(!(n/10))
printf("%d",sum);
else fun(n/10);這裡還加了一句,說當 n 10 為零時,printf 會被列印出來,funsit 將不再遞迴呼叫,這樣在這次呼叫之後,遞迴就會開始逐步返回。 總會有一段時間 n 10 為零,所以這是我之前提到的確保退出的方法。
-
void fun (int n)
static int sum=0;
sum+=n%10;
if(!(n/10))
printf("%d",sum);
fun(n/10);}
請注意,遞迴退出非常簡單,它將依次鍵入多個和,從後到前將它們相加,然後列印定義全域性變數。
-
age(5) 太囉嗦了,但我以 age(3) 為例。
1.如果在 main 中呼叫 age(3),則在輸入 age(3) 函式後,由於 n 不等於 1,則執行 c=age(n-1)+2; 這句話的意思是 age(n-1) 首先是 age(2),age(2) 的結果與 age(2) 的結果相加並分配給 c。
2.接下來,程式執行 age(2)。 由於 n 不等於 1,請執行 c=age(n-1)+2; 這句話的意思是 age(n-1) 首先執行,即 age(1),age(1) 得到的結果加上 2,為 c 賦值。
3.接下來,程式執行 age(1),其中 n 等於 1,因此 c 被分配值 10
4.接下來,回到 age(2),c=age(1)+2=10+2=12
5.接下來,回到 age(3),c=age(2)+2=12+2=14然後,返回 c。
6.程式返回 main 函式並列印 age(3) 返回的結果,即 14
-
age(n-1)+2;這個表示式實際上是對 int age(int n) 函式的遞迴呼叫。
上述過程等同於:
#include ""
int age(int n)
void main()
d=age(5)=age(4)+2=(age(3)+2)+2=((age(2)+2)+2)+2=(((age(1)+2)+2)+2)+2=18
如果您還沒有了解函式的遞迴呼叫。 我只能告訴你以下幾句話。
請按照上述步驟操作:
首先查詢 age(5),它將返回 age(4)+2; 但是我們也不知道年齡(4),所以我們問年齡(4); 將返回年齡(3)+2; 同理,查詢 age(3) 將返回 age(2)+2; 查詢 age(2) 將返回 age(1)+2; 我們知道,當 n=1; 程式返回 10;
這樣,我們得到 age(5)=age(4)+2=age(3)+2+2
age(2)+2+2+2
age(1)+2+2+2+2
解決。
-
結果應為 18。 首先,age(5) 在 n=5 中傳遞,因為 n!=1 執行 else 語句。
age(5)=age(4)+2;在這種情況下,n=4,同樣,n!=1 執行 else 語句。 age(4)=age(3)+2;age(3)=age(2)+2;age(2)=age(1)+2;年齡(1),n=1,所以c=10; 再次新增。
age(5)=10+2+2+2+2=18.
-
age(int) 函式是逐層設定的,知道引數等於 1,返回 10,然後逐層拉出,然後起飛到最後一層得到 c 的值。
2 是每層 (n!=1) 被新增。
-
樓上的解釋是正確的,age(n-1)+2,其實是乙個函式自呼叫,這是函式執行age(n-1),加上2,是暫時壓到棧裡,不先執行,知道遞迴條件的結束,即n==1
-
先儲存一下,你沒看房子,前面有個*,重新編譯一下,
-
當 n=1 時,只有一步。 即 1
有兩種方法可以移動 n=2,一次移動兩個節,或者一次移動兩個節。
當 n=3 時有三個。
n = 4 時有 5 個。
定律出來了,即 f[n]=f[n-1]+f[n-2]。
當 n = 1 f[1]=1 時,當 n = 2 f[2]=2