Повторные ответы рекурсивного метода в python - PullRequest
0 голосов
/ 15 апреля 2020

Я написал простую рекурсивную функцию:

def y(n):
    if n == 0:
        print("{} - {}".format(n, 0.182))
        return 0.182
    else:
        print("{} - {}".format(n, 1 / n - 5 * y(n - 1)))
        return 1 / n - 5 * y(n - 1)

И я не могу понять, почему она дала мне испорченные ответы. Вот пример:

0 - 0.182
1 - 0.09000000000000008
0 - 0.182
2 - 0.0499999999999996
0 - 0.182
1 - 0.09000000000000008
0 - 0.182
3 - 0.08333333333333531
0 - 0.182
1 - 0.09000000000000008
0 - 0.182

Когда я изменил код на:

def y(n):
    if n == 0:
        result = 0.182
        print("{} - {}".format(n, result))
        return result
    else:
        result = 1 / n - 5 * y(n - 1)
        print("{} - {}".format(n, result))
        return result

Он работал отлично. Почему?

Ответы [ 3 ]

1 голос
/ 15 апреля 2020

Потому что в этом блоке:

else:
    print("{} - {}".format(n, 1 / n - 5 * y(n - 1)))
    return 1 / n - 5 * y(n - 1)

Вы запускаете y дважды (при печати и при возврате)

В то время как во второй версии:

result = 1 / n - 5 * y(n - 1)
print("{} - {}".format(n, result))
return result

Вы выполняете y один раз.

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

Ошибка была в последней строке кода:

return 1 / n - 5 * y (n - 1)

Вам не нужно ничего возвращать, потому что печать уже дает желаемое значение.

попробуйте это:

def y(n):
    if n == 0:
        print("{} - {}".format(n, 0.182))
        return 0.182
    else:
        print("{} - {}".format(n, 1 / n - 5 * y(n - 1)))
0 голосов
/ 15 апреля 2020

Вся ошибка связана с else деталью

Как упоминалось в andreis11, вы передаете значения в свою функцию y() дважды

Попробуйте передать 1 / n - 5 * y(n - 1)) в переменную и просто вызывая функцию один раз.

result = 1 / n - 5 * y(n - 1)
print("{} - {}".format(n, result))
return result

Будет работать по той же причине

...