Проблемы Я работаю на это, из Крекинг кодирвоания Интервью:Подсчет путей в рекурсивном вызове
«Ребенок работает вверх по лестнице с п шагами, и может перескакивать либо 1 шаг, 2 шага , или по 3 шага за раз. Внесите метод, чтобы подсчитать, сколько возможных способов ребенок может подняться по лестнице ».
Исходя из C++ Я знаю, что счетчик может передаваться как ссылка, но в python вы не можете. Я также пытаюсь отслеживать последовательность шагов, которая приводит к успеху. Я пишу свой код так:
def __calculatePaths(currPathLength, paths, currSeries):
if currPathLength == 0:
print "successful series is", currSeries
return 1
elif currPathLength < 0: return 0
for i in range(1, 4):
newSeries = list(currSeries) # make new series to track steps
newSeries.append(i)
paths += __calculatePaths(currPathLength - i, paths, newSeries)
return paths
def calculatePaths(pathLength):
paths = __calculatePaths(pathLength, 0, [])
return paths
if __name__ == '__main__':
calculatePaths(3)
Выхода для этого вызова:
successful series is [1, 1, 1]
successful series is [1, 2]
successful series is [2, 1]
successful series is [3]
6
Я запутался, потому что моя программа получает правильные последовательности пути, но неправильное количество путей. Как я должен наращивать свои пути? Я знаю, как это сделать без глобальной переменной, но я не могу понять, не используя ее. Спасибо!
Можете ли вы использовать математику или она должна быть грубой силой? –
Решение для грубой силы было бы наиболее обобщенным для других рекурсивных проблем (поскольку у меня возникли проблемы с пониманием общего принципа использования счетчика в рекурсивных проблемах здесь) – asp97
В Python, если вы делаете счетчик контейнером (например, список) и передать его в качестве аргумента, вы эффективно передаете его по ссылке. Кроме того, если вы собираетесь писать код Python, я настоятельно рекомендую вам следовать [PEP 8 - Руководство по стилю для кода Python] (https://www.python.org/dev/peps/pep-0008/). – martineau