C++ 帮助解决堆栈溢出问题!
首先,我想说这是我第一次尝试为我的编程类做递归函数!无论如何,赋值是使用递归(绝对没有迭代)找到任何正整数的根。我的代码正确地计算任何正数的平方根,但是当我尝试取一个数的第四根或第三根时,我得到了一个堆栈溢出错误。我将发布我的代码,任何帮助都将不胜感激。如果你觉得需要的话,赶紧离开哈C++ 帮助解决堆栈溢出问题!,c++,C++,首先,我想说这是我第一次尝试为我的编程类做递归函数!无论如何,赋值是使用递归(绝对没有迭代)找到任何正整数的根。我的代码正确地计算任何正数的平方根,但是当我尝试取一个数的第四根或第三根时,我得到了一个堆栈溢出错误。我将发布我的代码,任何帮助都将不胜感激。如果你觉得需要的话,赶紧离开哈 #include<iostream> #include<iomanip> #include<cstdlib> using namespace std; double squa
#include<iostream>
#include<iomanip>
#include<cstdlib>
using namespace std;
double squareRoot (int root, double number, double low, double high);
int main() {
int root = 0;
double number;
double low, high;
double guess = 0;
double error = 0;
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
do
{
cout << "Find what root? (0 ends): ";
cin >> root;
if (root == 0)
{
exit(1);
}
else
{
cout << "Root of what value? ";
cin >> number;
}
low = number - (number - 1);
high = number;
cout << "root " << root << " of " << setprecision(4) << number << " is " << setprecision(10) << squareRoot (root, number, low, high) << endl;
}while (root != 0);
cin.get();
cin.get();
return 0;
}
double squareRoot (int root, double number, double low, double high)
{
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(10);
double guess = (high + low) / double(root);
double error = abs(number - (guess * guess));
if ((guess * guess) == number || error <= 0.000000000001)
{
return guess;
}
else if ((guess * guess) > number)
{
high = guess;
return squareRoot(root, number, low, high);
}
else
{
low = guess;
return squareRoot(root, number, low, high);
}
}
#包括
#包括
#包括
使用名称空间std;
双平方根(整数根、双数字、双低、双高);
int main(){
int root=0;
双数;
双低,双高;
双重猜测=0;
双误差=0;
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
做
{
根;
如果(根==0)
{
出口(1);
}
其他的
{
数量;
}
低=数字-(数字-1);
高=数量;
cout由于无限递归,因此会出现堆栈溢出;您永远找不到答案
拿一支笔和一张纸,用一个输入遍历递归(比如3代表根,8代表值)…找出你的求解逻辑不起作用的原因。你在递归中遇到了一个问题,堆栈溢出是递归函数的常见问题,你的退出条件可能有问题
如上所述,拿一支铅笔和一张纸开始挖掘。这里有一个提示:
你的函数被称为squareRoot
,它在几个地方包含guess*guess
,那么int root
参数是什么?你知道错误发生在哪一点吗?你试过调试你的程序吗?因为squareRoot()
函数不做任何I/O,它不应该修改cout
的属性;这是一个糟糕的功能混合。我确实调试了我的程序,从我的解释来看,错误似乎发生在“返回平方根”上else语句中的函数。看起来好像我函数中的else语句被多次调用,并且没有空间了?我确信有一种更有效的方法来处理这个程序,但我没有找到它。如果你仔细想想,你会发现number-(number-1)
简化为1
。