C++ 为什么这个C++;代码段分段错误? #包括 使用名称空间std; 整数递归(整数x){ 1和复发(--x); cout

C++ 为什么这个C++;代码段分段错误? #包括 使用名称空间std; 整数递归(整数x){ 1和复发(--x); cout,c++,segmentation-fault,C++,Segmentation Fault,这是一个无限递归。因此,当堆栈空间用完时,它将seg fault。它没有递归的终止条件,因此将递归,直到堆栈空间用完为止 #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(-

这是一个无限递归。因此,当堆栈空间用完时,它将seg fault。

它没有递归的终止条件,因此将递归,直到堆栈空间用完为止

#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非零时进行递归调用。

recur
是一个无限循环;您需要在那里设置一个基本条件,以便它停止调用自身。

例如(在函数顶部)
if(x什么是'1并重复出现(--x);'do?从未见过it@Powe:
和&
的替代标记。行本身没有多大意义(和的左侧始终为true),可以直接写入
。在这里,很明显没有终止的方法。@lorb:要停止递归,您需要在函数顶部有一个基格,这样就不需要再调用它自己,例如
if(x==0)返回0;
您还可以将
1
更改为
x
,当x为0时,这将停止对右侧的求值。@GMan-
1和
是有意义的,如果您意识到它可能应该是
x和
,在这种情况下它会使递归调用短路,如果
statement.total应该是“x和”,而不是“1和”.thanksNegative值不会导致无限循环,但您可能仍然会破坏堆栈,因此基本上是一样的。递归函数不是循环,而是递归。因此,它不是无限循环,而是无限递归……并且以一种非常不明显的方式。更喜欢
if(x
  x and recur(--x);