2016-10-07 10 views
0

コールごとにスタックに関する情報を詳細に確認し、返品ごとにデータを表示するにはどうすればよいですか?階乗の詳細なウォークスルーはどうすればよいですか?

私はすべての呼び出しで何が起こるかを示すために3つのボックスを描画しなければならないことを知っています。私は関数がどのように実際に動作するのか、それをどのように実装するのか分かりません。これはコーディングを必要としませんが、説明は必要ですか?

*****アップデート**** このような感じですか?

N = 3 
 
4 * factorial (3): 24 
 

 

 
N = 2 
 
5 * factorial (4): 120 
 

 

 
// and so on....

+0

デバッガでステップ実行してみます。 – JETM

答えて

0

あなたは、関数呼び出しの内部で何が起こっているかを知るためにいくつかprintの行を追加しようとすることができます。次のような:

def factorial(x): 
    print("factorial({}) is called".format(x)) 
    if x == 0: 
     print("Reached base branch") 
     return 1 
    else: 
     print("Reached recursive branch") 
     result = x * factorial(x - 1) 
     print("Exitted recursive branch") 
     return result 

print(factorial(3)) 

これは、あなたがfactorial(3)への呼び出しは、最終的にfactorial(2)factorial(1)、およびfactorial(0)を呼び出した後、ベースのケースに達したときに、再帰的階層を上がる方法を見てみましょうはずです。

+0

だからこのような何か: '' 'N = 5 2 * factorial(1):2' '' '' 'N = 4 3 * factorial(2):6' ''というように? – JDog

+0

上記の私の答えを見て、それはより良いフォーマット – JDog

+0

はい、あなたは確かに行うことができます。一般的な考え方は、関数本体の異なる場所に 'print'行を追加して、それらの点で引数の値を知ることです。 関数スタックには、引数以外の多くのものが格納されている可能性があります。しかし、再帰を理解するために、異なる再帰レベルでの引数の価値を知るだけで十分です。 – xuanluong

関連する問題