2016-09-13 17 views
0

再帰関数を実行しているときにPythonで再帰スタックを表示または表示するにはどうすればよいですか?Pythonで再帰スタックを印刷するには

+3

どのようなスタックを意味していますか?あなたはもう少し質問してくれますか? –

+0

再帰関数が呼び出されるたびに、言語は結果のスタックを構築します...これは意味がありますか? – AAA

+0

@AAA私は以下の答えを更新しました。あなたがフレームにアクセスできないことを心に留めてください。 – SpiXel

答えて

2

あなたが望むものは明らかではありませんが、あなたの質問がある限り、Python inspect moduleを使用して、次のような再帰的な方法で関数呼び出し元のスタックを出力できます。あなたはまた、現在のフレームにアクセスするためにsys.get_frame()を使用することができますし、f_localsプロパティを使用して、あなたは現在のフレームに渡されたパラメータにアクセスすることができます

import inspect, sys 

max_recursion_depth = 10 

def rec_func(recursion_index): 
    if recursion_index == 0: 
     return 

    rec_func(recursion_index-1) 

    current_frame = inspect.currentframe() 
    calframe = inspect.getouterframes(current_frame, 2) 

    frame_object = calframe[0][0] 

    print("Recursion-%d: %s" % (max_recursion_depth - recursion_index, frame_object.f_locals)) 
    print("Passed parameters: %s" % (sys._getframe(1).f_locals)) 


rec_func(max_recursion_depth) 

、再帰的に、あなたは減少し、このパラメータを観察することができます。

ほとんど全て私が上に持っているように得ることができるフレームオブジェクトからスタックに関する情報にアクセスできます。

関連する問題