简单的递归C++代码不断崩溃

KFD*_*oom 2 c++ recursion iostream

所以我在教自己C++,我很难理解为什么这段代码会崩溃.我已经确定这一行:string str = to_string(n)可能不正确.但我没有看到其他错误导致它崩溃的原因.

#include <iostream>
#include <string>

using namespace std;

void write_vertically(int n)
{
    string str = to_string(n);

    if (str.length()>=0) 
    {
        cout<<stoi(str.substr(0,1))<<endl;
        write_vertically(stoi(str.substr(1,str.length())));
    }

}

int main( ) 
{
    write_vertically(1234567890);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

KAB*_*ult 5

你正在堆栈溢出!而且你在完美的网站上找到了解决方案.

在行中string str = to_string(n); 无论值是什么n,to_string都将返回一个非空字符串,可以是"0","6"或"1653",无论如何.

递归的结束条件是if是否(str.length() >= 0)为false.但是,如上所述,这绝不是错误的.

您打算在递归的最终条件是什么?也许我们可以帮助你.

编辑:事实证明代码应该在进入堆栈溢出之前崩溃,因为它最终会调用stoi一个空字符串,这使得它抛出一个std::invalid_argument.但是,仍然存在无限递归问题,所以我会保持我的答案.