このコードは私を失いました。実行すると、奇妙なシーケンスが出力されます。
def print_n(number):
if (number <= 0):
return None
else:
print number
print_n(number-1)
print_n(number-1)
print_n(4)
私はそれがこのシーケンスを出力すると思った:
4,3,2,1,1,2,1,3,2,1
ただし、実際には次のように出力されます。
4,3,2,1,1,2,1,1,3,2,1,1,2,1,1
この関数のスタック図を描いてみたのですが、2回目の出現で迷ってしまいましたprint_n(number-1)
。
print_n(number-1)
このプログラムは、通常の再帰であるため、が 2 回出現しなくても理解できます。ただし、2 番目print_n(number-1)
の は、予想よりもはるかに複雑に思えます。この関数呼び出しをトレースして結果を説明する方法がわかりません...