我花了數小時試圖找出爲什麼這個遞歸函數工作,即使return
語句只在if
(基本情況)內。這個遞歸函數如何將一個值返回給main?
#include<stdio.h>
int main(void)
{
int sum_recursive_function(int const number_copy);//function prototype
int number, sum_recursive;
puts("Please type a number and I will add its digits:");
scanf("%d", &number);
sum_recursive = sum_recursive_function(number);
printf("%s%d\n", "The sum of the digits is: ", sum_recursive);
}
int sum_recursive_function(int const number_copy)
{
int last_digit, sum_pre = 0;
if(number_copy == 0){
return sum_pre;
}
else{
last_digit = number_copy % 10;
sum_pre = last_digit + sum_recursive_function(number_copy/10);
}
}
我明白這一點: 如果鍵入數字1,該if
功能檢查裏面如果number_copy
等於0,因爲它是沒有,它進入在else statment,則1的餘數由10 = 1分配給last_digit
。 Last_digit
(1)添加遞歸調用,發送1/10 = 0到sum_recursive_function
。這次sum_recursive_function
檢查參數是否等於0,因爲它等於0,所以返回sum_pre
爲0. Sum_pre
is = 1 + 0.然後我不明白sum_recursive_function
如何返回Sum_pre
(1)到main 。
如果不指定返回值和控制傳遞出來的函數結束時,許多編譯器將返回無論發生什麼事是在棧上 - 在這種情況下,這將是最後一個計算值,sum_pre。但這是未定義的行爲 - 您應始終使用return語句將值傳遞給函數。 – antlersoft 2014-10-12 05:15:04
謝謝antlersoft! – user3646717 2014-10-12 05:32:50