递归函数如何返回其值?

时间:2019-04-27 14:51:39

标签: c++ c recursion

我试图理解“递归”主题,但我不知道该递归函数在离开“ 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。 谢谢!

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;
}