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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.78
OasisKharkov
1 / 1 / 0
Регистрация: 28.07.2012
Сообщений: 35
#1

Рекурсивная функция возведения в степень - C++

21.11.2012, 20:16. Просмотров 2793. Ответов 9
Метки нет (Все метки)

Ребята, написал функцию для возведения в степень из учебника, но она почему-то не хочет работать.
Вот код:
C++
1
2
3
4
5
int pow(int base, unsigned short exp){
    if (exp==1)
        return base;
    else
        return (base*pow(base,exp-1));
Среда подчеркивает название функции pow и выдает такую ошибку: "more than one instance of overloaded funciton "pow" matches the argument list".
Не могу понять перевода этой фразы. Типа больше одного экземпляра перегруженной функции соответствует списку аргументов???

Чуть подправил код:
C++
1
2
3
4
5
6
7
8
int pow(int base, unsigned short exp){
    if (exp==1)
        return base;
    else{
        exp--;
        return (base*pow(base,exp));
    }
}
Ошибку среда перестала выдавать, программа заработала, но неужели в учебнике ошибка в коде, я кажись видел такой же пример с факториалом, в стиле:
C++
1
result = factor(n-1) *n
то есть в месте вызова функции, в скобках где идет перечисление аргументов, из одного из них вычитается единица.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2012, 20:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Рекурсивная функция возведения в степень (C++):

Рекурсивная функция возведения в степень - C++
Мое задание: Вычислить y = x^n(икс в степени n) по следующему правилу: y = ( x^n/2 )^2, если n четное и y = x * y^(n–1), если n...

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

Функция возведения в степень. - C++
написал библиотеку для вычисления степени чисел.некорректно работает при возвращении переменной из step.h в main.cpp и переводе в другую. ...

Функция для возведения в степень (стыдно) - C++
Здравствуйте. Нужно написать программу, которая читает два целых значения (основание и показатель степени) и выдаёт результат, используя...

не подключаеться функция возведениЯ в степень pow - C++
#include <math.h> L=sqrt(pow(x-x0)+pow(y-y0)); Почему не подключаеться функция возведениЯ в степень pow, кто...

Рекурсивная функция. Возвести число в степень путём многократного умножения самого на себя - C++
помогите #include<iostream.h> int muFunc(int x ,int y ); int main () { short int x , y , z; cout<<" vedit...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,929
21.11.2012, 20:18 #2
Назови функцию по другому, например myPow
0
Croessmah
Эксперт CЭксперт С++
13237 / 7509 / 847
Регистрация: 27.09.2012
Сообщений: 18,447
Записей в блоге: 3
Завершенные тесты: 1
21.11.2012, 20:20 #3
Цитата Сообщение от OasisKharkov Посмотреть сообщение
но неужели в учебнике ошибка в коде
ничего удивительного.
0
OasisKharkov
1 / 1 / 0
Регистрация: 28.07.2012
Сообщений: 35
21.11.2012, 20:36  [ТС] #4
Заметил такую фишку, если сделать аргументы одного типа, то все работает, независимо от типа возвращаемого значения:
C++
1
2
3
4
5
6
7
short pow(unsigned base, unsigned exp){
    if (exp==1)
        return base;
    else{
        return (base*pow(base,exp-1));
    }
}
Т.е. получается в рекурсивной функции параметры могут быть только одного типа?
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,929
21.11.2012, 20:39 #5
Цитата Сообщение от OasisKharkov Посмотреть сообщение
Заметил такую фишку, если сделать аргументы одного типа, то все работает, независимо от типа возвращаемого значения:
C++
1
2
3
4
5
6
7
short pow(unsigned base, unsigned exp){
    if (exp==1)
        return base;
    else{
        return (base*pow(base,exp-1));
    }
}
Т.е. получается в рекурсивной функции параметры могут быть только одного типа?
Получается, вы перегружаете стандартную функцию, а не реализуете свою. Назовите функцию по-другому, еще раз говорю.
1
OasisKharkov
1 / 1 / 0
Регистрация: 28.07.2012
Сообщений: 35
21.11.2012, 21:36  [ТС] #6
Спасибо MrGluck, ведь в любом учебнике написано, не называйте пользовательские функции именами стандартных функций или другими ключевыми словами. Я, по глупости, забыл, что pow(double x, double y) - стандартная и по привычке назвал мою функцию так же...
Теперь заработало:
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
#include <iostream>
using namespace std;
 
unsigned power(unsigned base, unsigned short exp);
 
int main()
{
    unsigned base, value;
    unsigned short exp;
    
    cout << "Enter base: ";
    cin >> base;
    cout << "Enter exponent: ";
    cin >> exp;
    if (!exp)
        cout << "Value is: " << 1 << "\n";
    else{
        value = power(base,exp);
        cout << "Value is: " << value << "\n";
    }
 
    return 0;
}
 
unsigned power(unsigned base, unsigned short exp){
    if (exp==1)
        return base;
    else{
        return (base*power(base,exp-1));
    }
}
Добавлено через 22 минуты
Странно только то, почему функция pow() работала, если я не подключал заголовок #include <cmath> ?
Или в современных компиляторах достаточно подключить заголовок #include <iostream>, хотя ведь он связан с вводом-выводом, а не с математическими функциями.
0
Croessmah
Эксперт CЭксперт С++
13237 / 7509 / 847
Регистрация: 27.09.2012
Сообщений: 18,447
Записей в блоге: 3
Завершенные тесты: 1
21.11.2012, 21:40 #7
Цитата Сообщение от OasisKharkov Посмотреть сообщение
Или в современных компиляторах достаточно подключить заголовок #include <iostream>, хотя ведь он связан с вводом-выводом, а не с математическими функциями.
нигде не указано, какие он может включать файлы, а какие нет.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,929
21.11.2012, 21:47 #8
Да и помогло вам также скидывание всех функций в кучу
C++
1
using namespace std;
1
Croessmah
21.11.2012, 21:49
  #9

Не по теме:

Цитата Сообщение от MrGluck Посмотреть сообщение
Да и помогло вам также скидывание всех функций в кучу
Вот он и пример конфликта, а то кто-то спрашивал на форуме пример.

0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,929
21.11.2012, 21:50 #10
Цитата Сообщение от Croessmah Посмотреть сообщение

Не по теме:


Вот он и пример конфликта, а то кто-то спрашивал на форуме пример.

Не по теме:

Да я сам ссылочку для аргумента сохранил

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2012, 21:50
Привет! Вот еще темы с ответами:

Возведения в степень - C++
Народ нужна помощь так как только, сегодня утром начал учить С++ сразу же возникли вопросы Например у меня есть последовательность чисел...

программа возведения в степень - C++
Друзья, я &quot;начинающий&quot; в СИ и поэтому столкнулся с такой проблемой: мой компилятор &quot;Miracle C&quot; Неправильно выполняет код, взятый из...

Класс возведения в степень - C++
Добрый день всем. Тут зашел в тупик. Класс с функцией-членом возведения числа в степень путем перемножения друг на друга (я хочу добавить и...

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
21.11.2012, 21:50
Ответ Создать тему
Опции темы

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