рекурсивное деление числа - PullRequest
0 голосов
/ 05 сентября 2011

У меня есть следующий код для рекурсивного деления одного числа на другое число:

#include <iostream>
using namespace std;

int divide(int number,int dividend){
    int answer=0;
    if (number>dividend  || number==dividend ){
        answer+=1;
        return  divide(number-dividend,dividend);
    }
    return answer;     
}

int main(){    
    cout<<divide(20,5)<<endl;
    return 0;
}

но, к сожалению, я получаю ноль в качестве ответа. Вы видите, что не так?

Ответы [ 4 ]

2 голосов
/ 05 сентября 2011

Ответ - локальная переменная. Когда вы запускаете этот код, первый вызов divide создает экземпляр переменной answer, устанавливает его в 0, а затем увеличивает его до 1. Затем, когда вы снова рекурсивно вызываете divide, создается 1004 * новый экземпляр переменной answer, устанавливает для этого экземпляра значение 0, а затем увеличивает его до 1.

В вашем последнем вызове divide он создает новый экземпляр переменной answer, устанавливает этот экземпляр в 0, но теперь number<=dividend не увеличивает его, и он возвращает тот экземпляр answer, который равен 0.

2 голосов
/ 05 сентября 2011

В ветви if вы увеличиваете answer, но возвращаете что-то не связанное (результат рекурсивного вызова) Я уверен, что это не то, что вы хотите. Иди оттуда.

1 голос
/ 05 сентября 2011

Вы делаете int answer=0; в начале вызова функции, поэтому, когда оператор if неверен, он возвращает 0, поэтому вы должны определить его как входной параметр (посредством ссылочного вызова) или сделайте его глобальным (не рекомендуется) и не устанавливайте его на ноль, просто установите его перед вызовом рекурсивной функции.

1 голос
/ 05 сентября 2011

Вы рекурсивно запускаете следующий код:

if (number>dividend  || number==dividend ){
    answer+=1;
    return  divide(number-dividend,dividend);
}

Но как только рекурсивный вызов завершится (это number < dividend), вы проигнорируете оператор if и вернет 0 ;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...