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

Программа не возводит отрицательное число в отрицательную степень

01.05.2022, 17:42. Показов 1512. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Программа на Python не проходит последний тест(выдает WA). В ходе ручных тестов выяснилось, что программа молчит на ввод аналогичный допустим -5 -5, т.е отрицательное число в отрицательную степень не возводится. В чем может быть причина, что нужно поправить или добавить в код?
Функция powerRecursion обязательно должна быть рекурсивной.

Сама задача: Напишите рекурсивную функцию, возводящую число a в степень n. Гарантируется, что все числа "помещаются" в стандартные вещественные (a и ответ) и целые (n) типы. Число n может быть отрицательным.

Python
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
def powerRecursion(a,n):
    if a == 0:
        return 0
    elif a > 0 and n == 0:
        return 1
    elif a < 0 and n == 0:
        return 1
    elif n < 0:
        return 1 / (a*powerRecursion(a, -n-1))
    elif n == 1:
        return a
    else:
        return a*powerRecursion(a, n-1)
 
a, n = input().split()
a = float(a)  
n = float(n)
if ((n - int(n) > 0) and (n < 0)) or (a == n == 0) or (n - int(n) > 0) or (n % 1 > 0):
    print('Invalid') 
else:
    if n - int(n) > 0:
        print('Invalid')
    result1 = powerRecursion(a,n)
    if result1 - int(result1) > 0:
        print(result1)
    if result1 - int(result1) == 0:
        print(int(result1))
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.05.2022, 17:42
Ответы с готовыми решениями:

Программа которая возводит введенное число в степень 10
Помогите пожалуйста отредактировать, я только начинаю изучать этот язык и делаю много ошибок(((( Вот то что у меня получилось: a =...

Программа не правильно возводит в степень
Есть задача, перевернуть число. Программа работает, но вместо последней цифры выдаёт 2 совершенно других числа, например: 654 выдаёт 4559 ...

Написать функцию, которая возводит число x в степень y (Y > 0) x - любое число, y - целое
написать функцию которая возводит число x в степень y(Y&gt;0) x- любое число y - целое

8
 Аватар для Semen-Semenich
5234 / 3479 / 1175
Регистрация: 21.03.2016
Сообщений: 8,306
01.05.2022, 17:51
Python
1
return 1 / (a*powerRecursion(a, -n-1))
может
Python
1
return 1 / (a*powerRecursion(a, -n + 1))
вы же уменьшаете отрицательное число при каждом вызове и 0 оно никогда не станет
0
1956 / 874 / 352
Регистрация: 05.09.2021
Сообщений: 1,387
01.05.2022, 18:10
fdas123,
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
def power_recursion(a,n):
    if n == 0:
        return 1
    if a == 0:
        return 0
    if n == 1:
        return a
    if n > 1:
        return a * power_recursion(a, n - 1)
    if n < 0:
        return 1 / power_recursion(a, -n)
        
a, n = map(float, input().split())
print(power_recursion(a, n))
0
0 / 0 / 0
Регистрация: 17.09.2021
Сообщений: 29
01.05.2022, 19:01  [ТС]
Теперь работает, но все равно последний тест проходить отказывается. Спасибо большое
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
01.05.2022, 20:01
fdas123, возможно там 0^0 -> у математиков нет точного ответа - 1 или "нет решения"
0
0 / 0 / 0
Регистрация: 17.09.2021
Сообщений: 29
02.05.2022, 00:10  [ТС]
Очень странная возникла проблема, но число -5 не возводится в -5 степень. Именно вот на эту комбинацию программа ничего не выводит, хотя я заменил строчки как вы писали. Остальные отрицательные числа возводятся в отрицательную степень. Может знаете как исправить?

Добавлено через 57 секунд
Аналогично не возводится -5 в -3, -5 в -4 и -5 в -5
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
02.05.2022, 00:12
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def powerRecursion(a, n):
    if not n:
        return 1
    if not a:
        if n > 0:
            return 0
        else:
            return float('inf')
    if n < 0:
        return powerRecursion(1/a, -n)
    return a * powerRecursion( a, n-1 )
#==============================================================================
while True:
    a, n = input('a, n = ').split()
    a = float(a)
    n = int(n)
    print( powerRecursion(a, n) )
    print()
0
1956 / 874 / 352
Регистрация: 05.09.2021
Сообщений: 1,387
02.05.2022, 00:24
Цитата Сообщение от fdas123 Посмотреть сообщение
Очень странная возникла проблема, но число -5 не возводится в -5 степень. Именно вот на эту комбинацию программа ничего не выводит, хотя я заменил строчки как вы писали. Остальные отрицательные числа возводятся в отрицательную степень. Может знаете как исправить?
Добавлено через 57 секунд
Аналогично не возводится -5 в -3, -5 в -4 и -5 в -5
Что-то странно, у меня все нормально выводит.
Программа не возводит отрицательное число в отрицательную степень
Code
1
2
3
4
5
6
-5 -3
-0.008
-5 -4
0.0016
-5 -5
-0.00032
Добавлено через 2 минуты
Вот прямо код, без ввода, прямо с подставленными числами.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def power_recursion(a,n):
    if n == 0:
        return 1
    if a == 0:
        return 0
    if n == 1:
        return a
    if n > 1:
        return a * power_recursion(a, n - 1)
    if n < 0:
        return 1 / power_recursion(a, -n)
        
# a, n = map(float, input().split())
print(power_recursion(-5, -3))
print(power_recursion(-5, -4))
print(power_recursion(-5, -5))
Code
1
2
3
-0.008
0.0016
-0.00032
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
02.05.2022, 02:24
В сообщении 7 я перемудрил что-то.
Вот так правильнее:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def powerRecursion(a, n):
    if not n:
        return 1
    if not a:
        return 0
    if n < 0:
        return powerRecursion(1/a, -n)
    return a * powerRecursion( a, n-1 )
#==============================================================================
while True:
    a, n = input('a, n = ').split()
    a = float(a)
    n = int(n)
    print( powerRecursion(a, n) )
    print()
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.05.2022, 02:24
Помогаю со студенческими работами здесь

Возвести число в отрицательную степень
Условие:Дано действительное положительное число a и целоe число n. Вычислите an. Решение оформите в виде функции power(a, n). ...

Возвести число в отрицательную степень
Дано действительное положительное число a и целоe число n. Вычислите an. Решение оформите в виде функции power(a, n). Стандартной...

Возвести число в отрицательную степень
Программа возводит число в степень, но она не может возвести число в отрицательную степень, как это сделать? При помощи рекурсии ...

Возвести положительное число в отрицательную степень
Нужно возвести положительное число в отрицательную степень. Например 2-200. С положительной степенью разобрался. Не могу придумать алгоритм...

Как возвести число в отрицательную степень?
double temp = 3^(-2); В итоге получилось значение -3;


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru