2014-10-26 3 views
-5

Я пишу две программы. Один поднимает число до силы другого числа, а другой делает наибольший общий делитель. Оба они разбиваются, используя бесконечную рекурсию, и я не могу понять, почему. Может кто-нибудь посмотреть на них и дать мне предложения? Пожалуйста, не отправляйте полные решения, только предложения.Бесконечная рекурсия в двух программах

#include <iostream> 
using namespace std; 
int pow(int base, int exp) { 
int somevariable = pow(base,exp-1); 
if (base == 0) { 
     return 1; 
} 
else { 
     return base * pow (base,exp-1); 
     } 
} 
int main () { 
int base; 
int power; 
cout << "This program calculates exponential values." << endl; 
cout << "Enter the base: "; 
cin >> base; 
cout << "Enter the power: "; 
cin >> power; 
cout << "" << endl; 
cout << base << "^" << power << " =" << 
cout << pow(base, power); 
} 
#include <iostream> 
using namespace std; 
int gcd(int number1, int number2) { 
int returnj = 0; 
if(number1 || number2 >= 0) { 
      return gcd(number2, number1 % number2); 
      } 

      else if(number1 || number2 == 0) { 
       return 1; 
       } 
} 
int main () { 
int number; 
int another; 
int gcdd; 
cout << "This program calculates the greatest common divisor (GCD) for two integers." << endl; 
cout << "Enter a number: "; 
cin >> number; 
cout << "Enter another: "; 
cin >> another; 
cout << "" << endl; 
cout << "GCD = " << gcd(number, another); 

}

+0

Почему вы убедитесь, что 'base' равно нулю? Научитесь использовать отладчик и пройдите через свой код, чтобы узнать, что происходит. Во втором ... C++ не является английским, логические операции не работают, как вы думаете. – luk32

+0

Я проверяю, что база равна нулю, потому что я хочу вернуть 1, если base 0, вместо обычного рекурсивного вызова. – Kelton2

+0

Ваша функция 'pow' содержит безусловный рекурсивный вызов. У него нет возможности остановить рекурсию. – RocketR

ответ

0

В ПР функции вам необходимо изменить

if (base == 0) 

To:

if (exp == 0) 

Тогда это не будет бесконечная рекурсия.

+0

Все еще не работает. – Kelton2

+0

Это не решит проблему, потому что есть вызов 'pow' сразу в начале' pow'. Так что это «если» даже не достигнуто. – RocketR

+0

Я исправил ошибку, но теперь мусор результата, а другая программа все еще сломана. – Kelton2

0

В настоящее время работает

#include <iostream> 
using namespace std; 

int pow(int base, int exp) { 
    //There's was a line here creating a loop because it never arrives to a return 
    if (exp == 0) { // base 0 makes not sense because the base it's always the same, it's the exp that decreases 
      return 1; 
    } 
    else { 
      return base * pow (base,exp-1); 
    } 
} 

int main () { 
    int base; 
    int power; 
    cout << "This program calculates exponential values." << endl; 
    cout << "Enter the base: "; 
    cin >> base; 
    cout << "Enter the power: "; 
    cin >> power; 
    cout << "" << endl; 
    cout << base << "^" << power << " = "; // This line was not closed. 
    cout << pow(base, power); 
} 
Смежные вопросы