常に再帰呼び出しと呼ばれるアクションの実装のためのコールを繰り返し、このプロセスは、最後の呼び出しが完了するまで、いないスタックのうち、唯一の(オープンスペース)を押し再帰関数で行われ、スタックから一つだけ、再帰関数の実装そうさときに、非常にメモリリソース、あまりにも実行回数は、メモリオーバーフロー現象が生成されます場合は、その再帰の層数を制御するようにしてください、ほとんどすべての再帰、再帰呼び出しを終了させることを満たす一定の基準をしばらく使用することができたときにループではなく、その再帰のためには、注意して使用すること!!!
再帰関数:関数のいずれか、呼び出し自体は(関数が自分自身を呼び出す)、この関数は、全体的な我々は再帰関数を呼び出します。
再帰関数を定義するには?(この機能が達成されたと仮定)
エントリポイントを考えてみましょう:(1)臨界点(エンドポイント)を見つけ、それが再びこの関数を呼び出す必要があるので、(2)この関数の実装は、最終的に全体的な需要を満たすことはできません。(後者は、元に見つかりました。体現との関係:後者のデータのコールバックを返すために必要な元を終了します)
長所:アイデアは明確な使命、コードより簡潔にすることですので、再帰は、問題を単純化することができます。短所:再帰的なシステムによる大規模環境への影響に、再帰の深さが大きすぎると、あなたが予期しない結果を得ることができます。
プレゼンテーション再帰関数は、自分自身を呼び出します。
1つの #ダイレクトコール自体: 2 DEF F(): 3 F() 4。 5。 F()
1つの #間接呼び出し自体を: 2 DEF FA(): 3 FB() 。4 DEF FB(): 5 FA() 。6 。7 FA()
例のコードは示しています。
1回の #再帰加算:0 + 1 + 2 + 3 + 4 + ... + N と 2 DEF mySum(N-): 3。 IF N - == 0: 4 リターン0 。5 リターン N- + mySum(N- 1 ) 6 7 プリント(mysum(100)) #5050 8 プリント(mysum(998)) #はい、それは重要な点であり、次に大きいがオーバーフローする 9 プリント(mysum(1000)) #のプログラムがクラッシュ(再帰的過誤)を 10 。11 12は、 #1〜5の階乗 13である DEFのjiechen(NUM): 14 IF NUM == 1 : 15 リターン 1。 16 リターン * jiechen(NUM。 - 1 NUM ) 。17 18で 印刷(。jiechen(5 )) 。19 20 21です #すべてのコンテンツ(ファイルやディレクトリは、複数段の場合を考えて)次のパスをトラバース 22で インポートOS 23です #から定義関数(再帰関数):ディレクトリ階層(多層)トラバース 24 DEFのprintDirs(パス): 25の DIRS = os.listdir(経路) 26である #ループ処理リスト 27 のために D にDIRS: 28 #は、その絶対パスDに与えるの組み立てをフォーム 29 fileAbsPath = os.path.join(経路D) 30 #決意ディレクトリまたはファイルがある 31 #この関数はディレクトリ印刷後に再び呼び出された場合、ファイルは、直接印刷することができる場合は 32を IF os.path.isfile(fileAbsPath): 33である プリント(D) 34である のelif (os.path.isdir fileAbsPath): 35 プリント(D) 36 printDirs(fileAbsPath) 37経路R&LT = ' C:\ユーザー\ Administratorの\デスクトップ\ A ' 38は printDirs(パス)