Python: рекурсивная функция для вычисления обратной мощности дает странные результаты - PullRequest
2 голосов
/ 05 апреля 2020

Я написал две рекурсивные функции (просто чтобы понять рекурсию) для вычисления отрицательного показателя числа. Первый работает отлично, а второй дает странные результаты для некоторых случаев. Например, power_recur (3, -1) выдает 0,33, что правильно, но power_recur (3, -2) выдает 1.

Кроме того, для power_recur2 (3, -2), если я изменяю return 1 / v чтобы просто вернуть v, он возвращает 9. Но когда он возвращается обратно на 1 / v, он возвращает 1, а не 1/9. Я знаю, что могу сделать эту работу, просто используя первую функцию, но я хочу знать, почему 2-я функция (power_recur2) не работает?

Это работает:

def power_recur(x, exp):
    if exp < 0:
        exp = abs(exp)
        if exp == 0:
            z = 1
        else:
            z = x * power_recur(x, exp-1)
        return 1/z

    if exp == 0:
        return 1
    else:
        return x * power_recur(x, exp-1)

Это не не работает: (выдает 1 для power_recur2 (3, -2))

def power_recur2(x, exp):
    if exp < 0:
        if exp == 0:
            v = 1
        else:
            v = x * power_recur2(x, exp+1)
        return 1/v

    if exp == 0:
        return 1
    else:
        return x * power_recur2(x, exp-1)

1 Ответ

0 голосов
/ 05 апреля 2020

Правильный код примерно такой.

def power_recur2(x, exp):
    if x == 0:
        return 0

    if exp < 0:
        return (1/x) * power_recur2(x, exp+1)

    if exp == 0:
        return 1
    else:
        return x * power_recur2(x, exp-1)

Удачи

...