関数型プログラミングのPython - 再帰
商は、これまでにゼロになるまで絶えず各商を印刷することに加えて、2で割った値100を求めます
巡回達成:
n = 100
while n > 0:
n = int(n/2)
print(n)
出力:
50
25
12
6
3
1
0
あなたが機能を使用する場合、どのようにそれを達成するには?
def calc(n):
n = int(n/2)
print(n)
if n > 0:
calc(n) # 调用自己
calc(100)
関数内、あなたは他の関数を呼び出すことができます。関数はそれ自体が内部的に自己と呼ばれている場合、この関数は再帰関数と呼ばれています。我々は上記に書いたこのコードは再帰的です。
再帰的な実装プロセス
def calc(n):
n = int(n/2)
print(n)
if n > 0:
calc(n)
print(n)
calc(10)
出力:
5
2
1
0
0
1
2
5
なぜ、出力は次のようになるでしょうか?
次の層への各機能は、現在の層が関数の最後ではない場合、上記のように、それは次のレベルに移動し続けなければならないので、それは機能が実行ダウン終了返し呼び出します。機能フレーズ印刷(N)の下部には、実行の最内層を待ち、その後、バック層を続け、その効果0,1,2,5が表示されますときに実行されます。
再帰的な性質:
1は、明確な終了条件を持っている必要があります。
2、再帰的、再帰的な問題の大きさをより深くするたびに、最後に比べて低減されるべきです。
図3に示すように、再帰的な効率が高く、コンピュータに再帰スタックオーバーフローのレベルを(原因となりすぎ、関数呼び出しスタック(スタック)このデータ構造は、各時刻のスタックフレームが1だけ増加されるスタックへの関数呼出しを介して達成されていません)スタックサイズが無制限ではないので、いつでも関数戻り、スタックは、層のスタックフレームを削減するので、再帰呼び出しの数が多すぎるスタックオーバーフローをもたらすであろう。
いくつかのアルゴリズムは、ヒープ行、行ととても速くて、再帰を使用することを学ばなければならない後に特定のシーンでの再帰は、非常に便利です。