两个程序中的无限递归

时间:2014-10-26 20:54:26

标签: c++ recursion infinite

我正在写两个节目。一个将数字提升到另一个数字的幂,而另一个则提出最大公约数。它们都使用无限递归崩溃,我无法弄清楚原因。有人可以看看这些并给我建议吗?请不要发布完整的解决方案,只提出建议。

#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);

}

2 个答案:

答案 0 :(得分:0)

在pow功能中你需要改变

if (base == 0)

要:

if (exp == 0)

然后它不会是无休止的递归。

答案 1 :(得分: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);
}