4

次の試験に向けて、プログラミングの問題をいくつか練習しています。これは、私が理解できなかった練習問題の 1 つです。

「次のコード (Python) は何を出力しますか?」

def f(s):
    if len(s) <= 1:
        return s
    return f(f(s[1:])) + s[0] #Note double recursion

print f('mat')
print f('math')

どうやら、答えは

atm
hatm

しかし、なぜ?

4

3 に答える 3

4
  1. f("mat") = f(f("at"))+"m" -> f(f(f("t"))+"a") +"m" -> f("ta") + "m" -> "atm"
    • f("ta") = f(f("a")) + "t" -> f("a") + "t" -> "at"
    • f("at") = f(f("t"))+"a" -> f("t")+"a" - > "ta"
    • f("t") = "t"
于 2013-10-23T19:21:47.143 に答える
2

再帰呼び出しの流れをたどるには、クロスプラットフォームのWinpdbなどのデバッガーを起動すると、すべての呼び出しが引数とともに有効であることがわかります。

再帰の「パターン」を理解しようとするために、順列を視覚化できるように数値で関数を実行してみてください

>>> print f('12')
21
>>> print f('123')
231
>>> print f('1234')
4231
>>> print f('12345')
23451
>>> print f('123456')
456231
>>> print f('1234567')
3426751
于 2013-10-23T19:34:14.353 に答える