为什么这个递归函数会崩溃
Why does this recursive function crash?
int g(int n) {
int x = g(n - 1);
if (x > 0) {
return x + 1;
} else {
return 1;
}
}
我的猜测是它与函数的第一行有关......但我不确定为什么会这样。
如果函数只是这样说:
int g(int n) {
return g(n - 1);
}
那么你显然不会期望它工作,而是继续递归,直到你用完堆栈空间和程序崩溃。通过将递归放在函数中的退出条件之前,您基本上就是这样做的。
应重写该函数,以便它在再次调用g()
之前执行退出测试。
如果您通过调试器(如 gdb
(运行它,您应该看到它实际上永远不会退出。
Program received signal SIGSEGV, Segmentation fault.
0x00000000004004de in g (n=-240246) at test.c:10
就我而言,test.c:10
是你的int x = g(n - 1);
线路,它只是一遍又一遍地被调用。
因为函数的第一行调用完全相同的函数,所以"return"永远不会被执行。因此,这是一个无限循环,直到它"崩溃"。
如果我们要评估它: g(20)
:呼叫g(19)
:呼叫g(18)
等。
通常在函数结束时被调用,或者至少在确保递归不是无限的计算之后(例如在示例代码中(。
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 如何在Elixir中调用递归函数并行
- 递归函数有效,但无法记忆
- 为什么我的递归函数按降序打印,然后按升序打印?
- 为什么递归函数的最终输出是 5?
- 有没有办法使用递归函数找到数组中最小值的 INDEX?C++
- 如何将记忆应用于此递归函数?
- 如何从递归函数中完全返回,该函数给出了每个函数结果的累积相加?
- 无穷大而循环时具有递归函数
- 即使没有调用这个递归函数,它是如何工作的?
- 如何使此递归函数从给定的起始位置返回最小的整数?
- 此递归函数的每次迭代的值存储在哪里?
- 可以清除递归函数中的变量吗?
- 如何在递归函数调用中返回当前函数值
- 递归函数 c++ 的复杂性
- 这个递归函数有什么作用?运行时的复杂性是多少?
- 执行递归函数时 C++ 应用程序崩溃
- 递归函数在C++崩溃
- 为什么这个递归函数会崩溃
- 为什么这个递归函数会崩溃