Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/29: Рейтинг темы: голосов - 29, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 05.12.2016
Сообщений: 31

Написать рекурсивную функцию для вычисления натуральной степени заданного целого числа

13.12.2016, 16:36. Показов 5710. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Рекурсия. Помогите исправить программу:
Напишите рекурсивную функцию для вычисления натуральной степени
заданного целого числа.
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
#include "stdafx.h" 
#include <iostream> 
 
using namespace std; 
int c; 
int step(int x, int y) 
{ 
if (y == 1) 
{ 
return x; 
} 
else 
{ 
step(x, y - 1)*x; 
} 
}; 
int main() 
{ 
setlocale(LC_ALL, "Russian"); 
int a; 
int b; 
cout << "Введите целое число а = "; 
cin >> a; 
cout << "Введите натуральное число b = "; 
cin » b; 
while (b > 0) 
{ 
step(a, b); 
cout << "a^b = " << step(a, b); 
} 
system("pause"); 
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.12.2016, 16:36
Ответы с готовыми решениями:

Написать рекурсивную функцию для расчета степени n заданного вещественного числа
Написать рекурсивную функцию для расчета степени n вещественного числа а.

Написать функцию вычисления произвольной натуральной степени натурального числа.
Написать функцию вычисления произвольной натуральной степени натурального числа. Использовать её в программе, выводящей на экран все...

Вычисление натуральной степени заданного целого числа
Не то, чтобы не могу написать программу. Не могу понять задания самого. Кто в состоянии понять, что требуется сделать? Вот задание: ...

4
13 / 13 / 10
Регистрация: 23.08.2015
Сообщений: 131
13.12.2016, 17:06
1. у тебя нет проверки на b. Если оно будет меньше чем 1, то программа будет выполняться бесконечно. Так что добавь проверку:
C++
1
if(b < 1) cout << "Введите число больше чем 1";
2. step(x, y - 1)*x - зачем тут умножаешь на х? Немного не понял логики этого.

3. По сути, тебе надо b- раз умножить a саму на себя? так?

Тогда лучше так:

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
int c = 1;
 
int step(int x, int y, int res)
{
    res *= x;
    if (c != y)
    {
        y--;
        step(x, y, res);
    }
    else
    {
        return res;
    }
    
}
 
int main()
{
    // код
 
    int res = a;
 
    cout << step(a, b, res) << endl;
}
Ты как раз там инициализировал переменную "с", но не использовал.
0
 Аватар для lawr
385 / 279 / 478
Регистрация: 09.05.2014
Сообщений: 769
13.12.2016, 19:01
olgaskvor, считывание переменных внутрь while внеси, а то бесконечный цикл получится. а функция по красоте вот так делается:
C++
1
2
3
4
5
6
7
8
long long step(int x, int y) 
{
    if (y==1)
        return x;
    if (y==0)
        return 1;
    step (x*x, y/2);
}
Добавлено через 16 минут
olgaskvor, пардон, ошибочка вышла- давно делал, забыл все) вот оно как действительно по красоте:
C++
1
2
3
4
5
6
7
8
9
long long step(int x, int y) 
{
    if (y==0)
        return 1;
    if (y==1)
        return x;
    x=step(x*x, y/2)*step(x, y%2);
    
}
0
0 / 0 / 0
Регистрация: 05.12.2016
Сообщений: 31
13.12.2016, 21:26  [ТС]
Спасибо, всё получилось, но есть одно но - если мы, например, мы введем 5 возвести в 10 степень, то он посчитает значение как 5 в 11 степени, он возьмет нашу пятерку и умножит ее 10 раз, а получается надо умножать 9 раз. Как так сделать?

Добавлено через 3 минуты
Получается нам переменной с надо присвоить значение 2
0
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
13.12.2016, 21:47
olgaskvor, вот код с моим объяснением. Надеюсь, пригодится.

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
 
using namespace std;
 
//Данная функция вычисляет степень от целого числа
 
double Power(int A, int N)
{
    if (N == 0)
        return 1;
    else if (N > 0)
        return A * Power(A, N - 1);
    else
        return 1 / Power(A, -N);
}
 
//Первое, что нужно сделать представить A^N в виде: A^N = A^1 x A^(N-1)
//Теперь распишем:
 
// Power(A, 0) = 1; (то есть, если N == 0 return 1, иначе N > 0)
// Power(A, 1) = A;
// Power(A, 2) = A * Power(A, 1);
// Power(A, 3) = A * Power(A, 2);
// Power(A, 4) = A * Power(A, 3);
//...
// Power(A, N) = A * Power(A, N - 1);
 
//Таким образом, мы получили рекурсивную функцию для степени целого числа
//Теперь усовершенствуем алгоритм для отрицательного показателя:
 
//Помним, что A^(-N) = 1 / A^N
//То есть:
// Power(A, 0) = 1; (то есть, если N == 0 return 1, иначе N > 0 (готово), иначе N < 0)
//...
// Power(A, N) = 1 / Power(A, -N);
 
//Таким образом, мы получили рекурсивную функцию Power()
 
int main()
{
    int A, N;
    cout << "Введите целое число:" << endl;
    cout << "A = ";
    cin >> A;
    cout << "Введите степень:" << endl;
    cout << "N = ";
    cin >> N;
    cout << "Число после возведения в степень: " << Power(A, N) << endl;
    system("pause");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.12.2016, 21:47
Помогаю со студенческими работами здесь

Написать рекурсивную функцию для вычисления произведения цифр заданного числа
Помогите, чем сможете: 1. Составить программу для подсчета количества всех натуральных чисел, меньших M, квадрат суммы цифр которых...

Написать рекурсивную функцию для вычисления количества цифр заданного числа
Задано натуральне число N. Написати рекурсивну функцію для обчислення кількості цифр заданого числа.(Задано натуральное числоN. Написать...

Написать рекурсивную функцию для расчета степени n вещественного числа a
Написать рекурсивную функцию для расчета степени n вещественного числа a (n – натуральное число). Только словами по проще,если...

Написать рекурсивную функцию для расчета степени n вещественного числа
Решить задачу в консольном режиме : Написать рекурсивную функцию для расчета степени n вещественного числа а (n - натуральное число)

Написать рекурсивную функцию mypow для расчета степени n натурального числа a.
1. Написать рекурсивную функцию mypow для расчета степени n натурального числа a. помогите пожалуйста, я пыталась написать, но у меня...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru