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

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

01.10.2022, 18:14. Показов 3071. Ответов 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
5514 / 2867 / 571
Регистрация: 07.11.2019
Сообщений: 4,751
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
5514 / 2867 / 571
Регистрация: 07.11.2019
Сообщений: 4,751
01.10.2022, 18:59
Цитата Сообщение от Fershtein Посмотреть сообщение
Float не смущает, так как ввод должен осуществляться в одну строку.
Так ввод ЦЕЛЫХ ЧИСЕЛ по условию. Float - не целое!
Функции обычно пишутся отдельно, а не в конструкции.
И global зачем??
0
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
01.10.2022, 19:01  [ТС]
Показатель целый, а не основание степени - НЕТ!
0
5514 / 2867 / 571
Регистрация: 07.11.2019
Сообщений: 4,751
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
14432 / 7474 / 1579
Регистрация: 06.09.2009
Сообщений: 27,111
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
14432 / 7474 / 1579
Регистрация: 06.09.2009
Сообщений: 27,111
01.10.2022, 22:37
Мой вариант на 22 и 44 тесте дает
Ошибка во время выполнения программы
0
4 / 4 / 0
Регистрация: 07.03.2019
Сообщений: 249
01.10.2022, 22:53  [ТС]
У меня то же самое. Проблемное основание от 1 до 2. Похоже, дробное основание
0
Вирусоборец
 Аватар для thyrex
14432 / 7474 / 1579
Регистрация: 06.09.2009
Сообщений: 27,111
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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru