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