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)
你正在堆栈溢出!而且你在完美的网站上找到了解决方案.
在行中string str = to_string(n);
无论值是什么n,to_string都将返回一个非空字符串,可以是"0","6"或"1653",无论如何.
递归的结束条件是if是否(str.length() >= 0)为false.但是,如上所述,这绝不是错误的.
您打算在递归的最终条件是什么?也许我们可以帮助你.
编辑:事实证明代码应该在进入堆栈溢出之前崩溃,因为它最终会调用stoi一个空字符串,这使得它抛出一个std::invalid_argument.但是,仍然存在无限递归问题,所以我会保持我的答案.