【问题标题】:Program recursively enters infinite loop [closed]程序递归进入无限循环[关闭]
【发布时间】:2015-03-05 19:27:56
【问题描述】:

我编写了一个程序,它接受两个输入——汽车的面积和摩擦系数——作为参数,然后计算阻力。

如果用户输入了无效的摩擦值(必须是0.2 <= friction <= 0.5),else 条件会正常工作。

但是,当我输入有效的摩擦值时,它会进入一个无限循环,并且永远不会给我任何错误。

这是我的代码。

double area, friction;

cout << "lutfen surtunen yuzeyi giriniz: \n";
cin >> area;

cout << "lutfen surtunme katsayisini giriniz: \n";
cin >> friction;

calc_force(velocity, area, friction);

// My function

void calc_force(int velocity, double area, double friction)
{
    double force;
    double seccade = friction;
    if(0.2 <= seccade && seccade <= 0.5 ) { // if  statement does not work
        force = (0.0615)*area*friction*velocity*velocity;
        cout << "Velocity\t\t Drag Coefficien\t\t Area\t\t Force\n";
        cout << "\t\t" << velocity << "\t\t" << seccade << "\t\t" << area << "\t\t" << force << "\n";
        velocity+=5;

        if(velocity>40) return ;

        cout << "lutfen surtunme katsayisini giriniz: \n";
        cin >> friction;
        cout << "lutfen surtunen yuzeyi giriniz: \n";
        cin >> area;
        calc_force(velocity, area, friction);
    } else { // this works
        cout << "lutfen surtunme katsayisini dogru giriniz: \n";
        cin >> friction;
        cout << "lutfen surtunen yuzeyi giriniz: \n";
        cin >> area;
        calc_force(velocity, area, friction);
    }
}

velocity 定义为const int。当我调用和定义函数时,我有int frictiondouble friction。我已按照以下建议更正了其他数据类型。我使函数递归,因为我希望它重复。

【问题讨论】:

  • friction 是一个int(在calc_force 中),所以它永远不能介于0.20.5 之间。
  • 请,下一次,也减少你的代码。它将帮助您在提出不好的问题之前了解问题。
  • 再读一遍,@BrianGradin。这是0.2 &lt;= x,而不是x &lt;= 0.2
  • @crashmstr 谢谢你告诉我这个错误,我编辑了程序但仍然得到相同的结果
  • @SemirUmutKurt 1. 我没有看到终止条件(calc_force 怎么知道何时调用自己)。 2. 将velocity 增加5 如何改变friction,因为检查的唯一条件是摩擦?

标签: c++ recursion infinite-loop


【解决方案1】:

试试这个:

void calc_force(int velocity, double area, double friction){
    double force;
    double seccade = friction;
    if(0.2 <= seccade && seccade <= 0.5 ){ // if  statement does not work
        force = (0.0615)*area*friction*velocity*velocity;
        cout<<"Velocity\t\t Drag Coefficien\t\t Area\t\t Force\n";
        cout<<"\t\t"<<velocity<<"\t\t"<<seccade<<"\t\t"<<area<<"\t\t"<<force<<"\n";

        velocity+=5;
    }

    if (velocity > 40 ) {
        return;
    } else {
        cout<<"lutfen surtunme katsayisini giriniz: \n";
        cin>>friction;
        cout<<"lutfen surtunen yuzeyi giriniz: \n";
        cin>>area;
        calc_force(velocity, area, friction);
    }
}

这既包含了参数的更改,也将递归移到了 if 语句之外。这确保了一个基本案例是可访问的,并且应该为您提供您正在寻找的功能。

【讨论】:

  • 我也纠正了我的这个错误,但结果还是一样
  • 您是否试图将递归用于使程序运行无限次以外的其他事情?如果是这样,您将需要某种退出递归循环的“基本情况”。
  • 我将其添加到退出但如果(速度> = 40)返回时结果仍然相同;
猜你喜欢
  • 1970-01-01
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多