所以我正在自学 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;
}
最佳答案
你遇到了 Stack Overflow!而您在完美的网站上找到了解决方案。
在行 string str = to_string(n);
无论 n
的值如何,to_string
都将返回一个非空字符串,可以是“0”、“6”或“1653”等等。
递归的结束条件是如果 (str.length() >= 0)
为假。
然而,如上所述,这绝不是错误的。
您希望递归的结束条件是什么?也许我们可以帮助您。
编辑:事实证明,代码应该在进入堆栈溢出之前崩溃,因为它最终会用一个空字符串调用 stoi
,这使得它抛出一个 std::无效参数
。但是,仍然存在无限递归问题,所以我会继续回答。
关于c++ - 简单的递归 C++ 代码不断崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31433985/