1

このコードは私を失いました。実行すると、奇妙なシーケンスが出力されます。

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)の は、予想よりもはるかに複雑に思えます。この関数呼び出しをトレースして結果を説明する方法がわかりません...

4

2 に答える 2