具有递归功能时的无限while循环

时间:2018-10-18 08:15:12

标签: c++ loops recursion while-loop

我正在解决问题。我想要一个函数,该函数返回所有方式以使不同的正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”并永远重复一次。请帮助我。

编辑:我的代码仅解决了一个问题,因此不是解决方案,我将尝试关闭主题,谢谢大家

1 个答案:

答案 0 :(得分:1)

在这个概念上,first始终为 1 ,而before始终为 1 ,因为first在这里从未递增因为没有达到指令。

first 1 初始化,而before 1 初始化,这意味着before==first为true,循环将忽略所有continue之后的其他说明。

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