我的代码在值较小时有效,例如[a = 1,gos = 0.5,N = 1] & [a = 1,gos = 0.2,N = 2]。
但是,当输入更大的值时它会崩溃。例如[a = 10, gos = 0.01, N = 18] & [a=50, gos=0.01, N=64]。
我该如何解决?
代码如下:
#include <cstdlib>
#include <iostream>
using namespace std;
double num_trunks(double A, double B, int N);
double num_trunk_checker(double B, double gos, int N, double A);
double num_trunks(double A, double B, int N)
{
double gos_prev = 1;
double gos;
int k = 1;
while (k != (N+1))
{
gos = (A*gos_prev)/(k+(gos_prev)*A);
gos_prev = gos;
k++;
};
num_trunk_checker(B,gos,N,A);
}
double num_trunk_checker(double B, double gos, int N, double A)
{
if (B != gos)
{
N = N + 1;
num_trunks(A,B,N);
}
else
{
cout << "Number of trunks: " << N << "\n";
}
}
int main(int argc, char *argv[])
{
double A, gos;
int N = 1;
cout << "A: ";
cin >> A;
cout << "gos: ";
cin >> gos;
num_trunks(A,gos,N);
system("PAUSE");
return EXIT_SUCCESS;
}
最佳答案
在num_trunks(A, B, N)
中,你计算出一个gos
值,然后调用num_trunk_checker(B, gos, N, A)
。但是在num_trunk_checker
中,如果B
不匹配gos
,你转身调用num_trunks(A, B, N+1)
。所以唯一改变的是更大的 N
,如果 gos
永远不等于 B
,您将得到无限递归。
num_trunks(A, B, N)
calculuate gos (which has to be less than 1)
num_trunk_checker(B, gos, N, A)
num_trunk_checker(B, gos, N, A)
if (B != gos) num_trunks(A, B, N+1)
gos
有可能越过 B
的值,所以你永远不会得到相等。
也许你的意思是:
if (gos > B) //...
关于c++ - 输入为高值时程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11904563/