我试图理解“递归”主题,但我不知道该递归函数在离开“ if”规定后如何返回其参数。
int sum(int x);
int main(){
int num;
printf("Enter a num : ");
scanf("%d",&num);
int result=sum(num);
printf("Result : %d\n",result);
return 0;
}
sum(int x){
if (x > 4){
return sum(x-1);
}
}
例如,如果我将“ sum”函数编辑为“ if(x> 2)”,它将返回2值。那就是我想知道的。 Sum(2)没有任何值,但返回2。 谢谢!
答案 0 :(得分:2)
sum(int x){ if (x > 4){ return sum(x-1); } }
不返回值,因为 else 分支中缺少返回值,只有缺少的 else 分支才能完成递归
我无法了解此递归函数在离开“ if”规定后如何返回其参数。
如果缺少返回值,则行为未定义,如果我在计算机上执行此操作:
pi@raspberrypi:/tmp $ ./a.out
Enter a num : 2
Result : 2
pi@raspberrypi:/tmp $ ./a.out
Enter a num : 12
Result : 4
pi@raspberrypi:/tmp $ ./a.out
Enter a num : 44
Result : 4
但结果可以是其他任何东西
答案 1 :(得分:0)
您的代码未按照列出的顺序进行编译...并且未从sum函数返回结果导致未定义的行为。但是,还有一个问题,您的递归最终需要“自下而上”。在某些情况下,必须满足“基本情况”,并且该函数将返回自身以外的内容。例如,尝试运行以下代码,看看x在不同的输入下如何变化...
#include <stdio.h>
int sum(int x);
int main() {
int num;
printf("Enter a num : ");
scanf_s("%d", &num);
int result = sum(num);
printf("Result : %d\n", result);
return 0;
}
int sum(int x) {
if (x > 4) {
printf("x is %d\n", x);
return sum(x - 1);
}
return 10;
}