Форум программистов, компьютерный форум CyberForum.ru

Вычисление степени числа рекурсивным вызовом - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
fs444
6 / 10 / 0
Регистрация: 18.08.2009
Сообщений: 480
22.03.2010, 19:14     Вычисление степени числа рекурсивным вызовом #1
По условию задачи
Вычисление степени числа рекурсивным вызовом

написал код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include<iostream>
using namespace std;
 
#include<windows>
 
int power(int base, int exponent);
 
int main()
{
      int base; //основание. В.п.
      int exponent; //степень, в которую будет возведено основание. Вп.
 
      cout << "Base: ";
      cin >> base;
 
      cout << "exponent: ";
      cin >> exponent;
 
      cout << base << "^" << exponent << " = " << power(base, exponent) << endl;
 
      system("pause");
      return 0;
}
 
int power(int base, int exponent)
{
   if (base <= 1)
   {
      return 1;
   }
   else
   {
      return base * power(base, (exponent - 1));
   }
}
И любое значение exponent выше 1 вызывает ошибку

Process raised exception class EStackOverflow with message 'Stack overflow'.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2010, 19:14     Вычисление степени числа рекурсивным вызовом
Посмотрите здесь:

Вычисление рекурсивным методом значение математической зависимости C++
C++ вычисление степени
Вычисление степени числа А с натуральным показателем n C++
вычисление дробовой степени с точностью C++
Вычисление степени, в которую необходимо возвести 2 для получения числа, которое <= заданному числу C++
Вычисление корня n-ой степени C++
Рекурсивное вычисление корня k-й степени C++
Вычисление степени матрицы, вычисления произведения двух матриц, вычисление суммы двух матриц C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
23.03.2010, 04:17     Вычисление степени числа рекурсивным вызовом #2
Ошибка в условии остановки рекурсии. Рекурсивные вызовы должны останавливаться, когда переменная exponent==1, а не base<=1 - а так у тебя происходит бесконечная рекурсия (т.к. каждый рекурсивный вызов происходит с тем же самым параметром base), и соответственно, переполнение стека. Вот правильный вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
int pow(int base, int exp)
{
    if(exp==1)
       return base;
    return base*pow(base, exp-1);
}
 
int main()
{
    int b=2;
    int e=4;
    std::cout << pow(b, e) << std::endl;
    return 0;
}
fs444
6 / 10 / 0
Регистрация: 18.08.2009
Сообщений: 480
24.03.2010, 19:31  [ТС]     Вычисление степени числа рекурсивным вызовом #3
Nameless One, спасибо.
Yandex
Объявления
24.03.2010, 19:31     Вычисление степени числа рекурсивным вызовом
Ответ Создать тему
Опции темы

Текущее время: 14:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru