Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
olgaskvor
0 / 0 / 0
Регистрация: 05.12.2016
Сообщений: 11
1

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

13.12.2016, 16:36. Просмотров 661. Ответов 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
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2016, 16:36
Ответы с готовыми решениями:

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

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

Написать рекурсивную функцию для расчета степени n вещественного числа a (n — натуральное число)
Помогите пожалуйста, написал программу, но без рекурсива. Не понимаю как он вообще должен выглядеть...

Реализовать рекурсивную функцию вычисления степени из числа
Добрый день , помогите решить задачи :...

Написать рекурсивную функцию для расчета степени а в степени х, х - любое число
Здравствуйте. Написать рекурсивную функцию для расчета степени а в степени х, х - любое число ...

4
neketsh
13 / 13 / 10
Регистрация: 23.08.2015
Сообщений: 131
Завершенные тесты: 1
13.12.2016, 17:06 2
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
377 / 271 / 478
Регистрация: 09.05.2014
Сообщений: 769
13.12.2016, 19:01 3
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
olgaskvor
0 / 0 / 0
Регистрация: 05.12.2016
Сообщений: 11
13.12.2016, 21:26  [ТС] 4
Спасибо, всё получилось, но есть одно но - если мы, например, мы введем 5 возвести в 10 степень, то он посчитает значение как 5 в 11 степени, он возьмет нашу пятерку и умножит ее 10 раз, а получается надо умножать 9 раз. Как так сделать?

Добавлено через 3 минуты
Получается нам переменной с надо присвоить значение 2
0
Fixer_84
1407 / 885 / 793
Регистрация: 30.04.2016
Сообщений: 3,006
13.12.2016, 21:47 5
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
13.12.2016, 21:47
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2016, 21:47

Написать рекурсивную функцию нахождения степени числа
2. Написать рекурсивную функцию нахождения степени числа.

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.