此递归函数不返回值时如何正常工作?

问题描述 投票:0回答:2
include <stdio.h>
int sum = 1;
int fact(int num){
    if (num == 0){
        return 1;
    }
    fact(num -1);
    sum *=num;
}

int main()
{
    int num = 5;  
    printf("%d ", fact(num));
    return 0;
}

尽管我没有从递归条件返回任何信息,但上述程序的输出仍打印120。我对递归调用如何在堆栈上创建函数有基本的了解。有人可以告诉我该程序如何打印输出而没有任何回报?

更新:下面的代码返回值1如预期。

#include <stdio.h>
int sum = 1;
int fact(int num){
    if (num == 0){
        return 1;
    }
    num * fact(num -1);
}

int main()
{
    int num = 5;  
    printf("%d ", fact(num));
    return 0;
}
c recursion data-structures factorial
2个回答
3
投票

如果定义了一个函数以返回值但不返回值,并且调用函数尝试使用该返回值,则调用undefined behavior


0
投票

官方用语:

© www.soinside.com 2019 - 2024. All rights reserved.