Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249

Рекурсивная функция для нахождения степени числа

01.10.2022, 18:14. Показов 3285. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Я написал программу, которая вычисляет степень числа с положительным и отрицательным целыми показателями.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
x1,x2=map(float,input().split())
s=1
if (x2<0):
    def stepen(x1,x2):
        global s
        if (x2==0):
            return (1/s)
        else:
            s=s*x1
            return stepen(x1,x2+1)
    print((stepen(x1,x2)))
else:
    def stepenya(x1,x2):
        global s
        if (x2==0):
            return (s)
        else:
            s=s*x1
            return stepenya(x1,x2-1)
    print((stepenya(x1,x2)))
При загрузке кода на сайт с проверкой выдает частичное решение (какие-то 2 теста не прохожу). Можете подсказать, что не так в моем коде?

Ссылка на сайт с проверкой кода: https://informatics.msk.ru/mod... erid=252#1
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.10.2022, 18:14
Ответы с готовыми решениями:

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

Рекурсивная функция, находящая значение n-й степени числа x
Здравствуйте! Помогите, пожалуйста, написать программу. Задание: Cоздать рекурсивную функцию PowerN(x,n) вещественного...

Рекурсивная функция нахождения целой степени ненулевого числа
Здравствуйте! Прошу программистов, знающих С++ , помочь с созданием простой рекурсивной программы.

23
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,760
01.10.2022, 18:30
Цитата Сообщение от Fershtein Посмотреть сообщение
степень числа с положительным и отрицательным целыми показателями
1-я строчка с float не смущает?
Зачем def в if - else запихнули?
0
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
01.10.2022, 18:44  [ТС]
Float не смущает, так как ввод должен осуществляться в одну строку. А если вы 2 возведете в степень -1 у вас будет 0,5 - поэтому float и стоит

По поводу def в if-else

У меня 2 рекурсивные функции на случай показателя положительного и отрицательного.

Добавлено через 51 секунду
И у меня задание не использовать оператор **, а также функцию pow
0
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,760
01.10.2022, 18:59
Цитата Сообщение от Fershtein Посмотреть сообщение
Float не смущает, так как ввод должен осуществляться в одну строку.
Так ввод ЦЕЛЫХ ЧИСЕЛ по условию. Float - не целое!
Функции обычно пишутся отдельно, а не в конструкции.
И global зачем??
0
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
01.10.2022, 19:01  [ТС]
Показатель целый, а не основание степени - НЕТ!
0
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,760
01.10.2022, 19:03
Хорошо, где у вас целый показатель? У вас же один сплошной float.
0
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
01.10.2022, 19:06  [ТС]
И что? У меня рекурсия работает и в конструкции. В одном условии выполняется одна рекурсия, в другом - другая. Можно, конечно, вывести две эти функции за условие, а потом это условие в конец пихнуть, но не думаю, что это действительно что-то изменит.

Global я поставил, потому что если я в саму функцию пропишу s=1 - он мне выдает неправильный ответ. Почему - не знаю

Добавлено через 52 секунды
Вы совершенно не к тому цепляетесь. Программа сама вводит ЦЕЛЫЙ показатель. Она по условию не будет вводить дробный.
0
2431 / 1474 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
01.10.2022, 19:08
u235, сори, вижу, что человеку пытаешься объяснить, но выложу версию, не факт что работает, но воде работает.
Python
1
2
3
4
5
6
7
8
9
10
11
def func(a, b):
    if b == 0:
        return 1
    if b < 0:
        return 1 / a * func(a, b + 1)
    else:
        return a * func(a, b - 1)
 
 
x1,x2=map(int,input().split())
print(func(x1, x2))
1
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
01.10.2022, 19:29  [ТС]
Цитата Сообщение от Alexarh Посмотреть сообщение
x1,x2=map(int,input().split())
Основание - ВЕЩЕСТВЕННОЕ число, а не целое

Добавлено через 17 минут
Цитата Сообщение от Alexarh Посмотреть сообщение
u235, сори, вижу, что человеку пытаешься объяснить, но выложу версию, не факт что работает, но воде работает.
Python
1
2
3
4
5
6
7
8
9
10
11
def func(a, b):
    if b == 0:
        return 1
    if b < 0:
        return 1 / a * func(a, b + 1)
    else:
        return a * func(a, b - 1)
 
 
x1,x2=map(int,input().split())
print(func(x1, x2))
Ваша программа набрала даже меньше баллов, чем моя первоначальная. Если заменить int на float - столько же баллов, но по-прежнему при определенных входных данных выдает ошибку. Есть версия про 0 в отрицательной степени (там ведь, по сути, 0 будет в знаменателе)
0
2431 / 1474 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
01.10.2022, 21:10
Если ошибка связана с 0 в отрицательной степени, то обработайте ошибку, как требуют на сайте или, как положено там.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
def func(a, b):
    if a == 0 and b < 0:
        raise ZeroDivisionError
    if b == 0:
        return 1
    if b < 0:
        return 1 / a * func(a, b + 1)
    else:
        return a * func(a, b - 1)
 
 
x1, x2 = map(float, input().split())
print(func(x1, x2))
0
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
01.10.2022, 21:49  [ТС]
Цитата Сообщение от Alexarh Посмотреть сообщение
то обработайте ошибку, как требуют на сайте или, как положено там.
Да нихрена там не просят. Ссылку же я для чего дал? Там даже непонятно, какие именно входные данные. Типа сам гадай, почему может быть неправильно

Добавлено через 2 минуты
Цитата Сообщение от Alexarh Посмотреть сообщение
def func(a, b):
    if a == 0 and b < 0:
        raise ZeroDivisionError
    if b == 0:
        return 1
    if b < 0:
        return 1 / a * func(a, b + 1)
    else:
        return a * func(a, b - 1)
x1, x2 = map(float, input().split())
print(func(x1, x2))
Ничего нового. Все та же непонятная ошибка. Хотя прога, по логике, и у вас работает, и у меня работает
0
0 / 0 / 0
Регистрация: 11.06.2022
Сообщений: 38
01.10.2022, 21:55
else уберите

Добавлено через 37 секунд
Просто return a * func(a, b - 1) в конце функции
0
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
01.10.2022, 22:01  [ТС]
Цитата Сообщение от PythonTutor Посмотреть сообщение
Просто return a * func(a, b - 1) в конце функции
Ничего не изменилось
0
Вирусоборец
 Аватар для thyrex
14450 / 7489 / 1582
Регистрация: 06.09.2009
Сообщений: 27,133
01.10.2022, 22:22
Цитата Сообщение от Alexarh Посмотреть сообщение
Если ошибка связана с 0 в отрицательной степени
https://www.cyberforum.ru/cgi-bin/latex.cgi?{0}^{0} тоже не определен
0
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
01.10.2022, 22:24  [ТС]
Да. Но, читал, что в программировании принято ноль в нулевой считать за 1. Чтоб алгоритмы не ломались. Но я пытался выводить любой ответ в этом случае - но ошибка не менялась (то есть если бы выводило не то - написал бы "неправильный ответ". А так выводит "ошибка во время компиляции")
0
Вирусоборец
 Аватар для thyrex
14450 / 7489 / 1582
Регистрация: 06.09.2009
Сообщений: 27,133
01.10.2022, 22:37
Мой вариант на 22 и 44 тесте дает
Ошибка во время выполнения программы
0
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
01.10.2022, 22:53  [ТС]
У меня то же самое. Проблемное основание от 1 до 2. Похоже, дробное основание
0
Вирусоборец
 Аватар для thyrex
14450 / 7489 / 1582
Регистрация: 06.09.2009
Сообщений: 27,133
01.10.2022, 22:57
Цитата Сообщение от Fershtein Посмотреть сообщение
Похоже, дробное основание
так оно и должно быть типа float
0
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
01.10.2022, 23:21  [ТС]
Уточнение: основание от 1 до 1.1

Добавлено через 17 минут
Проблемное основание: 1.00001
0
964 / 485 / 241
Регистрация: 02.06.2016
Сообщений: 760
01.10.2022, 23:24
Лучший ответ Сообщение было отмечено Alexarh как решение

Решение

Fershtein, ошибка скорее всего StackOverflow, пробуйте бинарный алгоритм или еще какой-нибудь, который быстрее сходится
Python
1
2
3
4
5
6
7
def func(a, b): return \
    1                if b ==0 else \
    1 / func(a, -b)  if b < 0 else \
    a * func(a, b-1) if b % 2 == 1 else\
    (t := func(a, b // 2)) * t
 
print(func(*map(float, input().split())))
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.10.2022, 23:24
Помогаю со студенческими работами здесь

Рекурсивная функция для расчета степени вещественного числа
Написать рекурсивную функцию для расчета степени N вещественного числа A (n- натуральное число)... рекурсию вообще не понимаю(( долблюсь...

Рекурсивная функция для расчета степени n вещественного числа a
Добрый день) Подскажите, пожалуйста, в чем ошибка и как ее решить в этой программе? #include &lt;iostream&gt; using namespace std;...

Рекурсивная функция для нахождения числа сочетаний
Описать рекурсивную функцию Combin1(N,K) целого типа, находящую C(N,K) — число сочетаний из N элементов по K — с помощью рекуррентного...

Рекурсивная функция числа в n степени
program zdarova; var a,n,k:longint; function step(x,t:integer):longint; var p:longint; begin if a=0 then step:=1 else ...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru