#python #grid #definition #function-definition
Вопрос:
Я нашел базовый код на python,чтобы найти количество путей, которые вы можете выбрать в сетке (m, n), если вы можете идти только вниз или вправо.
def gridtraveller(m,n):
if m == 0 or n == 0:
return 0
elif m == 1 or n == 1:
return 1
return gridtraveller(m-1,n) gridtraveller(m,n-1)
Но я не понимаю, почему это работает для двух вещей:
Что делает def something (m,n)?
И почему здесь мы возвращаем определение ? ( Я понимаю , почему мы возвращаем
m-1 и n-1, но я не понимаю концепции def, возвращающей def)
Спасибо вам и извините, что английский не мой родной язык.
Комментарии:
1.
def
является ключевым словом python для определения объекта функции:def func():
определяет, чтоfunc
делает вызов,func
является объектом функции иfunc()
вызывает эту функцию. функция, которую вы описываете, использует рекурсию (если она заходит так далеко), она просто снова вызывает эту функцию внутри функции, а затем может вызывать ее снова, пока она либо не достигнет максимальной глубины рекурсии, либо не вернет какое-то фактическое значение, когда она просто вернется к лестнице функций и все это подытожит2. Я предлагаю вам ознакомиться с некоторыми базовыми учебными пособиями (такими как эти, написанные Кори Шафером ), в частности, с этим (по теме): Учебник по Python для начинающих 8: Функции , также речь идет о рекурсии и поиске других источников, если вам нужно лучше понять это
3. Благодаря тебе я пойду посмотрю прямо сейчас
Ответ №1:
В Python def
ключевое слово просто используется для определения функции, в данном случае это функция gridtraveller(m,n)
. То, что вы видите с этим последним оператором return, на самом деле является функцией, возвращающей значение другой функции. В этом случае он возвращает значение другого вызова gridtraveller
, но с другими значениями параметров; это называется рекурсией. Важной частью рекурсии является наличие соответствующих базовых вариантов или возвращаемых значений, которые не заканчиваются другим рекурсивным вызовом(т. Е. return 0
или return 1
, как вы видите).
Это может быть проще понять, просто пройдя несколько итераций рекурсивных вызовов. Если ваш первый вызов функции начинается с m = 2
и n = 1
, первый вызов закончится на return gridtraveller(1,1) gridtraveller(2,0)
. Первый вызов в этом операторе затем вернется 1
, так как либо m
или n
есть 1
, а второй вернется 0
, так n = 0
как здесь дает общий результат 1
. Если используются большие значения m
и n
, это, очевидно, приведет к увеличению числа, так как произойдет больше вызовов gridtraver(m,n)
.