c - 具有停止条件但没有基本情况的递归函数仍然有效

标签 c

我尝试在不了解基本情况的情况下通过计算 sum 直到 n 来解决问题,并得出了这个结果。它有效,但我不知道为什么。

int sumUpTo(int num)
{
    int i, sum = 0;      // I also tried not to initialize sum here but the results are the same
    for(i = 0; i < num; i++)
        sum = sumUpTo(num - 1) + num;
    return sum;
}

int main()
{
    int num;
    printf("Enter a number: ");
    scanf("%d", &num);
    printf("Sum = %d\n", sumUpTo(num));
    return 0;
}

我发现这个函数有停止条件i=num但没有基本情况,循环将以sum = sumUpTo(0) + 1 + ... + num停止。如果不知道 sumUpTo(0) 的值,程序如何运行? 这里可能会发生什么? 程序是否假定 sumUpTo(0) 的值为 0(无论是否初始化变量 sum)?

最佳答案

假设您输入 3 作为输入。

for(i = 0; i < 3; i++)   // Returns 3 + 3 = 6
    for(i = 0; i < 2; i++)   // Returns 2 + 1 = 3
        for(i = 0; i < 1; i++)   // Returns 1 + 0 = 1
            for(i = 0; i < 0; i++) // Returns 0

这里递归将结束,因为不会调用另一个实例

如果您不初始化 sum,正如您的评论所述,该函数仍然可以工作,只是结果未确定。

关于c - 具有停止条件但没有基本情况的递归函数仍然有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67236677/

相关文章:

c - 如何在 C 中一段时间​​后退出 while(1) 循环?

c - 绑定(bind)函数出错(C 简单服务器)

c - C中输出单个字符

c - 如何让 MinGW GCC 识别 size_t 的 %zu 格式说明符?

c - 从C中的数组中删除一个条目

c - 编译c程序时找不到stdio.h文件

c - 为什么 printf() 在这段代码中打印出来?

C++ Pin共享库 undefined symbol

我可以在共享库中声明一个全局变量吗?

如果没有足够的文件描述符,重命名会失败吗?