【问题标题】:infinity while loop when have recursive function具有递归函数时的无限while循环
【发布时间】:2019-03-23 00:13:30
【问题描述】:

我正在解决一个问题。我想要一个返回所有方法的函数,使不同的正数int 加上等于该数字,例如 6 将是 1+5 ,2+3+1,2+4 所以将是 3 但我的解决方案返回无限循环

#include <iostream>
using namespace std;
int find(int num,int before)
{

    int first=1;
    int count=1;
    int end =num-1;
    if(end-first==0) return count;
    while(end-first!=1&&end-first!=0)
    {
        if(end==before||first==before) continue;
        first++;
        end--;
    }
    before=first;
    return count+find(end,before);
}
int main()
{
    int a;
    cin>>a;
    int x=find(a,1);
    cout<<x;
}

我在循环中尝试cout“a”并永远重复。请帮帮我。

编辑:我的代码只是解决了一个问题,所以它不是解决方案,我会尝试关闭主题,谢谢大家

【问题讨论】:

  • 一旦if(end==before||first==before) continue; 命中,就没有什么可以打破循环了。
  • 我的目的是防止第一个或结束等于循环,这一切,不是打破循环,谢谢你的建议

标签: c++ loops recursion while-loop


【解决方案1】:

在这个概念中,first 将始终为 1before 将始终为 1,因为 first 在此处永远不会递增,因为未达到指令.

first1初始化,before1初始化,这意味着before==first为真,循环将忽略continue之后的所有其他指令.

并且由于您在比较 end==before||first==before,这将始终为真,因为即使 end==beforefalse,第二个测试也会为真。 false||true的测试逻辑是true

【讨论】:

  • 感谢您的回答,但我不明白为什么“第一”没有增加?我的目的是在第一次救援中,“之前”将等于第一次在循环中增加时,我尝试更改“||”通过 && 因为我想“不等于 1 或 0 将结束循环”但它再次返回无限循环,请帮助我,谢谢
  • 在此处调用函数find(a,1);before 具有1 作为值。在函数int first=1; 内部,这里首先将 1 作为值。所以测试first==beforetrue 因为1=1。并使用指令continue 循环忽略之后的所有内容。并进入下一次迭代。
  • 我将测试您的代码并为您的想法找到解决方案。但是循环的问题在于
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-15
  • 2016-03-19
  • 1970-01-01
  • 2023-02-22
  • 1970-01-01
  • 2021-12-06
  • 2021-01-16
相关资源
最近更新 更多