我花了数小时试图找出为什么这个递归函数工作,即使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