Member 13949923 Ответов: 1

Как работает эта рекурсивная функция?


def mult(a, b):
если b == 1:
вернуть
еще:
возврат a + mult(a, b-1)

печать(мульт(2, 4))

Что я уже пробовал:

Я попытался понять, как получается, что этот код выполняет умножение, не имея оператора умножения, но безуспешно.

Herman<T>.Instance

почему вы не отладили его?

Member 13949923

- Я пробовал поставить кучу отпечатков, но он все еще не показывает мне, как он делает умножение без оператора умножения." Edit: я только что понял, почему.

1 Ответов

Рейтинг:
4

OriginalGriff

Рекурсия проста для понимания: смотрите раздел "рекурсия", и вам все станет ясно!

Ваша функция вызывает себя с различными параметрами и возвращается к себе со значением каждый раз, когда она вычисляется.
Посмотрите, что происходит с вашим кодом, когда вы передаете определенные значения: a == 2, b == 3
1) 2, 3 : b - это не 1, поэтому вы вызываете функцию снова, с a == 2, b == 2
1.1) 2, 2 : b не равно 1, поэтому вы вызываете функцию снова, с a == 2, b == 1
1.1.1) 2, 1 : b - это единица, поэтому вы возвращаете a: 2
1.2) возвращается к 2, 2: и возвращает 2, которые вы получили из 1.1.1, плюс 2 : 4
2) возвращается к 2, 3: и возвращает 4, которые вы получили от 1.2, плюс 2 : 6

Таким образом, вся функция возвращает 6.

Это плохой пример рекурсии - цикл намного проще и эффективнее, - но просто выполните его с помощью отладчика, и вы поймете, что я имею в виду.


Member 13949923

Спасибо Вам за отличный ответ. Кажется, теперь я все понял. Поправьте меня, если я ошибаюсь. В основном процесс умножения происходит через параметр "а", добавляемый к результату "мульт(а, в-1)" рекурсивным действием, поскольку "мульт(а, в-1)" является меньшей функцией внутри своей собственной большей зеркальной функции def " мульт(а, в)".

OriginalGriff

Забудьте термины "меньшая функция" и "зеркальная функция" - это одна и та же функция, вызываемая рекурсивно.

Подумайте об этом: умножение-это повторяющееся сложение:
x * y = x + x + x ... x + x
где есть "y x" на правой стороне есть:
4 * 3 = 4 + 4 + 4
7 * 2 = 7 + 7
Это все, что делает ваша рекурсивная функция: вычитание единицы, чтобы обеспечить подсчет того, сколько раз ей нужно вызвать себя.