Я пишу две программы. Один поднимает число до силы другого числа, а другой делает наибольший общий делитель. Оба они разбиваются, используя бесконечную рекурсию, и я не могу понять, почему. Может кто-нибудь посмотреть на них и дать мне предложения? Пожалуйста, не отправляйте полные решения, только предложения.Бесконечная рекурсия в двух программах
#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);
}
Почему вы убедитесь, что 'base' равно нулю? Научитесь использовать отладчик и пройдите через свой код, чтобы узнать, что происходит. Во втором ... C++ не является английским, логические операции не работают, как вы думаете. – luk32
Я проверяю, что база равна нулю, потому что я хочу вернуть 1, если base 0, вместо обычного рекурсивного вызова. – Kelton2
Ваша функция 'pow' содержит безусловный рекурсивный вызов. У него нет возможности остановить рекурсию. – RocketR