問題はコーディングインタビューをクラッキングから、このある再帰呼び出しのパスを数える:は、私が働いている
「子供は、n個のステップに階段を実行している、と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-Style Guide for Python Code](https://www.python.org/dev/peps/pep-0008/)に従うことを強く推奨します。 – martineau