цикл бесконечности, когда есть рекурсивная функция - PullRequest
0 голосов
/ 18 октября 2018

Я решаю проблему.Мне нужна функция, которая возвращает все способы сделать другое положительное 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 голосов
/ 18 октября 2018

В этой концепции first всегда будет 1 , а before всегда будет 1 , потому что first здесь никогда не увеличивается, поскольку инструкция не достигается.

first инициализируется 1 и before 1 , что означает, что before==first имеет значение true, и цикл будет игнорировать все остальные инструкции после continue.

и поскольку вы сравниваете end==before||first==before, это всегда будет верно, потому что даже когда end==before равно false, второй тест будет верным.Логика теста false||true равна true.

...