#include <iostream>
using namespace std;
int recur(int x) {
1 and recur(--x);
cout << x;
return x;
}
int main() {
recur(10);
return 0;
}
回答
1 and recur(--x);
相当于
recur(--x);
显然你正在无限递归调用导致堆栈溢出,然后分段错误。
我猜你的意思
x and recur(--x);
这使得只有当x是非零的递归调用。
...并以一种非常不明显的方式。倾向于tzaman提出的'if(x <= 0)return 0;',因为它更具可读性,并且在后面的代码更改导致'x'在向负无穷大的方向跳过0时更安全。 – msw 2010-05-11 08:58:39
这是一个无限递归。所以它会在堆栈空间用尽时进行故障排除。
它没有递归的终止条件,所以会递归,直到你用完堆栈空间。
recur
是一个无限循环;你需要在那里放置一个基本条件,所以它停止调用自己。
例如(在功能的顶部)if (x <= 0) return 0;
另外,1 and
有什么意义?这是一个无操作...也许你的意思是x and
,这将停止递归,当x
达到0
,只要你有一个正数(负值将仍然会导致无限循环)recur
。
负值不会造成无限循环,但您仍然可能会炸毁堆栈,所以它基本上是一样的东西。 – 2010-05-11 08:35:08
递归函数不是__looping,__它是__recursing .__因此,它不是__endless循环,__而是__endless递归.__ – sbi 2010-05-11 08:46:52
- 1. 这段代码为什么会给我一个分段错误?
- 2. 为什么这个代码片段给分段错误
- 3. 这个C++代码为什么会产生分段错误?
- 4. 什么错误++这段代码在C
- 5. 为什么我得到这段代码的分段错误?
- 6. 这段代码为什么会产生分段错误?
- 7. 这段代码为什么会产生分段错误?
- 8. 为什么我得到这段代码的分段错误?
- 9. 为什么这个C++代码在运行时给我分段错误错误?
- 10. 为什么这个代码给分段错误
- 11. 为什么分段错误发生在这个openmp代码中?
- 12. 这段代码有什么问题?分段错误:11
- 13. 这段代码有什么问题?我得到分段错误
- 14. 为什么std :: sort在这段代码上抛出一个分段错误?
- 15. 为什么这段代码产生这个错误?
- 16. 为什么这段代码有这个错误:“Expected :)”?
- 17. 这段代码的错误是什么?
- 18. javascript - 这段代码有什么错误?
- 19. 这段代码有什么错误?
- 20. 这段代码有什么错误?
- 21. 这段代码的错误是什么?
- 22. 为什么这个看似简单的C++代码会产生分段错误?
- 23. 为什么这段代码
- 24. 这段代码为什么会导致分析错误?
- 25. 这段代码为什么增加? C#
- 26. 这段代码片段为什么会出现错误?
- 27. 这段代码为什么会产生段错误?
- 28. 这段代码为什么会出错
- 29. 这段代码为什么会出错?
- 30. 这段java代码为什么会给我这么多错误?
'1和recur(-x)'是什么?'做?从来没有见过它 – RvdK 2010-05-11 08:18:33
堆栈溢出? – 2010-05-11 08:19:38
@Powe:'和'是'&&'的替代标记。这条线本身并没有什么意义(AND的左侧总是为真)并且可以写成“recur( - x)”。在这里,显然没有办法终止。 @lorb:为了停止递归,你需要在函数的顶部存在一个基本情况,而不需要另外调用它自己,比如'if(x == 0)return 0;'你也可以把'1'改成' x',当x为0时,将停止评估右侧。 – GManNickG 2010-05-11 08:19:53