c++ - 输入为高值时程序崩溃

标签 c++ if-statement crash while-loop

我的代码在值较小时有效,例如[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/

相关文章:

c++ - 在 mac 上重新安装 g++

c++ - 检查非可移植整数类型是否存在的可移植方法

ruby-on-rails - 声明关联对象是否存在 - Ruby

mysql - MYSQL中写IF..ELSE

python - 对字典值进行 SUMIF 的好方法是什么?

ios - iPhone 6 崩溃。无法获取原因

c++ - 将指针作为对数组的引用传递

c++ - 重新排列二维数组

android - 不幸的是,App 已停止 Android 开发错误

c++ - 二叉树的删除函数出错? (C++)