Аватар для Игорюня
20 / 16 / 11
Регистрация: 07.12.2013
Сообщений: 244

Рекурсивное возведение в степень числа

21.03.2014, 14:29. Показов 25907. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Рекурсивная функция,которая принимает 2 параметра:первый-число,второй-степень в которую нужно возвести число.Всё просто.Но до моей тупой коробки не может дойти то,как указать,чтобы рекурсия вызывалась конкретное число раз.
function(2,3);
Рекурсия должна вызываться два раза: 2*2=4, 4*2=8. Вот не могу понять,как указать количество рекурсий.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.03.2014, 14:29
Ответы с готовыми решениями:

Рекурсивное возведение в степень
ребят, нужна задача... рекурсивное возведение в base степень exponent: stepen(int base, int exponent)

Рекурсивное возведение в степень
Поднести в степень (положительное целое число) действительное ненулевое число. Использовать рекурсию.

Рекурсивное возведение в степень
Составить программу вычисления функции F(x) = xn.

3
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
21.03.2014, 14:38
Лучший ответ Сообщение было отмечено Игорюня как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
int RecursivePow(int base, int power)
{
    return power == 1 ? base : base * RecursivePow(base, power - 1);
}
 
int main()
{
    std::cout << RecursivePow(2, 3) << std::endl;
    return 0;
}
2
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
21.03.2014, 14:42
C++
1
std::cout << RecursivePow(2, -1) << std::endl;
1
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
21.03.2014, 14:53
Цитата Сообщение от Игорюня Посмотреть сообщение
Но до моей тупой коробки не может дойти то,как указать,чтобы рекурсия вызывалась конкретное число раз.
Во-первых нафига? А во-вторых это будет не рекурсия, а явный цикл, да ещё и со счётчиком. Рекурсия всегда работает до условия на значение параметра: выделяется значение параметра, к которому он стремится в последовательности рекурсивных вызовов и для которого функция должна вернуть результат не рекурсивно. Для степени это просто: не рекурсивно можно вернуть единицу при нулевом показателе. Отсюда решение: разложить показатель на сумму слагаемых и для каждое слагаемое использовать в качестве значения показателя для следующего вызова. Можно фиксировать одно слагаемое, приняв его единичным, или делить примерно поровну.
C++
1
2
3
4
5
6
7
8
9
10
11
12
double degree(double a, int n)
{
 if (n<0)
 {
  return 1.0/degree(a, -n);
 }
 if (n==0)
 {
  return 1.0;
 }
 return a*degree(a, n-1);
}
, здесь подразумевается, что https://www.cyberforum.ru/cgi-bin/latex.cgi?a^1=a, но такая степень не вычисляется.
C++
1
2
3
4
5
6
7
8
9
10
11
12
double degree(double a, int n)
{
 if (n<0)
 {
  return 1.0/degree(a, -n);
 }
 if (n==0)
 {
  return 1.0;
 }
 return degree(a, 1)*degree(a, n-1);
}
, здесь вычисляются обе степени, но так делать нельзя, так как из каждого экземпляра вызовется degree(a, 1), из которого снова будет аналогичный вызов.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
double degree(double a, int n)
{
 int leftn;
 if (n<0)
 {
  return 1.0/degree(a, -n);
 }
 if (n==0)
 {
  return 1.0;
 }
 return degree(a, leftn=n/2)*degree(a, n-leftn);
}
, можно было бы присвоить
C++
1
x=degree(a, n/2);
и вернуть
C++
1
return x*x;
, но вот беда: при нечётном n два слагаемых не могут быть равны.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
double degree(double a, int n)
{
 double x;
 if (n<0)
 {
  return 1.0/degree(a, -n);
 }
 if (n==0)
 {
  return 1.0;
 }
 x=degree(a, n/2);
 if ((n%2)==0)
 {
  return x*x;
 }
 return x*x*a;
}
, здесь нечётные показатели раскладываются на три слагаемых каждый, из которых один равен единице.

Добавлено через 3 минуты
Цитата Сообщение от 0x10 Посмотреть сообщение
C++
1
2
3
4
int RecursivePow(int base, int power)
{
 return power == 1 ? base : base * RecursivePow(base, power - 1);
}
не правильно: при нулевом и отрицательном показателе будет переполнение стека формально бесконечной рекурсией. Уж хотябы
C++
1
2
3
4
int RecursivePow(int base, unsigned int power)
{
 return power == 0 ? 1 : base * RecursivePow(base, power - 1);
}
. Но эффективней бинарное разложение.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.03.2014, 14:53
Помогаю со студенческими работами здесь

Возведение числа а в степень n
Возведение числа а в степень n ,задача не проста чем , 1&lt;=а&lt;=10 | 1&lt;=n&lt;=7000 Степень может быть 7000 , и тут у меня возникли трудности ,...

Возведение из числа степень
Прошу помочь. Вводим любое число n и надо возвести её степень. (притом, должно быть или 2 в степени x, или 3) Например: n=81 &gt;&gt;...

Возведение числа в степень!
Хай всем кто на форуме! Помогите с задачей! Надо возвести число в степень #include &lt;iostream&gt; using namespace std; int...

Возведение числа в степень n-1
Есть формула {(-1)}^{n-1}*{3}^{n-1} , n увеличивается циклом на 1. Как записать числа в степень n-1 без пользов. и стандартных функций??...

Возведение числа n в степень m.
Написать программу - возведение числа n в m-ю степень. Входные данные поступают с клавиатуры. Результат выводится на экран.


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

Новые блоги и статьи
Angular vs Svelte - что лучше?
Reangularity 09.07.2025
Сегодня рынок разделился на несколько четких категорий: тяжеловесы корпоративного уровня (Angular), гибкие универсалы (React), прогрессивные решения (Vue) и новая волна компилируемых фреймворков. . .
Code First и Database First в Entity Framework
UnmanagedCoder 09.07.2025
Entity Framework дает нам свободу выбора, предлагая как Code First, так и Database First подходы. Но эта свобода порождает вечный вопрос — какой подход выбрать? Entity Framework — это. . .
Как использовать Bluetooth-модуль HC-05 с Arduino
Wired 08.07.2025
Bluetooth - это технология, созданная чтобы заменить кабельные соединения. Обычно ее используют для связи небольших устройств: мобильных телефонов, ноутбуков, наушников и т. д. Работает она на частоте. . .
Руководство по структурам данных Python
AI_Generated 08.07.2025
Я отчетливо помню свои первые серьезные проекты на Python - я писал код, он работал, заказчики были относительно довольны. Но однажды мой наставник, взглянув на мою реализацию поиска по огромному. . .
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах
Programma_Boinc 08.07.2025
Тестирование энергоэффективности и скорости вычислений видеокарт в BOINC проектах Опубликовано: 07. 07. 2025 Рубрика: Uncategorized Автор: AlexA Статья размещается на сайте с разрешения. . .
Раскрываем внутренние механики Android с помощью контекста и манифеста
mobDevWorks 07.07.2025
Каждый Android-разработчик сталкивается с Context и манифестом буквально в первый день работы. Но много ли мы задумываемся о том, что скрывается за этими обыденными элементами? Я, честно говоря,. . .
API на базе FastAPI с Python за пару минут
AI_Generated 07.07.2025
FastAPI - это относительно молодой фреймворк для создания веб-API, который за короткое время заработал бешеную популярность в Python-сообществе. И не зря. Я помню, как впервые запустил приложение на. . .
Основы WebGL. Раскрашивание вершин с помощью VBO
8Observer8 05.07.2025
На русском https:/ / vkvideo. ru/ video-231374465_456239020 На английском https:/ / www. youtube. com/ watch?v=oskqtCrWns0 Исходники примера:
Мониторинг микросервисов с OpenTelemetry в Kubernetes
Mr. Docker 04.07.2025
Проблема наблюдаемости (observability) в Kubernetes - это не просто вопрос сбора логов или метрик. Это целый комплекс вызовов, которые возникают из-за самой природы контейнеризации и оркестрации. К. . .
Проблемы с Kotlin и Wasm при создании игры
GameUnited 03.07.2025
В современном мире разработки игр выбор технологии - это зачастую балансирование между удобством разработки, переносимостью и производительностью. Когда я решил создать свою первую веб-игру, мой. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru