再帰再帰のpythonのpython

Pythonの再帰

 

1.1再帰を説明します

  1.定義

      1.関数内、あなたは他の関数を呼び出すことができます。関数が自分自身の中に自分自身を呼び出す場合は、この関数は再帰関数です。

  2、再帰的な性質

      1.明確な終了条件が存在する必要があります

      2.各エントリの再帰深く、問題の規模が前再帰と比較して低減されるべきです

      3.再帰効率は高くはないが、再帰のあまりにも多くのレベルは、関数呼び出しを入力するたびに(コンピュータに、関数呼び出しが、このデータ構造のスタック(スタック)を介して達成され、スタックオーバーフローを引き起こすことができます

          スタックは、関数戻り、毎回層スタックフレームを追加し、スタックは、一つのスタックフレームを減少します。スタックの大きさのためには無限ではないので、再帰呼び出しの数があまりにも多くのスタックオーバーフローが発生します)

1.2簡単な例は、再帰の原理を理解します

    参考ブログます。https://www.cnblogs.com/Fantinai/p/7806356.html

  1、再帰的なインスタンス

  再帰的なケース
#!は/ usr / binに/パイソンのenv 
# - * -コーディング:UTF-8 - * - 
DEF digui(NUM):
    NUM印刷
    :IF NUM> 0 
        digui(NUM - 1。)
    それ以外:
        印刷「を------ ------ ' 
    NUMプリント

diguiを(3)

' ''の実行結果
。3 
2 
1 
0 
------------ 
0 
1 
2 
3 
'' '

      1.たびに関数呼び出しの戻りがあり、一つは、代わりに(関数呼び出しの最初の部分で)メインに直接返すの1つ、再帰的に呼び出すことへの復帰です。 

      前記第1の再帰:N = 3 3 [3]の描画

      前記第2の再帰:N = 2 2描画[3,2]

      4。第3再帰:N = 1描画[3,2,1]

      5. n = 0の場合、> 0がFalseではなく、再帰、印刷NUM = 0、機能彼のレベルで呼び出し元に戻る、すなわち、n = 1つのスタック

      6.次に、位置digui(NUM - 1)下方を行う:印刷印刷NUM = 1、1スタック、スタック要素:[3,2]

      7. 2、3、およびので、右の最終的な印刷を印刷します

                

  2、解析結果

      1.なぜそれ以上の成果でしょうか?忘れるために関数自体の後にコードを呼び出す考えているので、他の後にPythonコードです。

      2.関数自体を呼び出すとき、コードが後に終了しますが、待っている状態ではありませんが、コードの実行後に、再度、対応する色で同じカラープリント()関数の文が待機Falseです。

      あなたは再帰関数のdigui(3)を呼び出したときに、次のように3再帰関数を詳細、私は再帰関数分解を行うためにこれを入れてみましょう、実装プロセスは以下のとおりです。

      

 1.2再帰的な階乗決意再帰的原則

  1、コード階乗

  コード4の階乗
#!/ usr / binに/ ENVのpython 
# - * -コーディング:UTF-8 - * - 
DEF試験(N):
    1 == N場合:
        リターン1 
    他:
        RES = N *試験(N-1)
        の印刷「N:% S ----- RET:%S」%(N、RES)
    戻りRESが

試験(4)#24印刷
''」
2 ----- RET:N 2 
、N:3 ----- RET: 6 
N:4 ----- RET:24 
24 
''」
  4の再帰的な階乗控除
#1、再帰的ステップ
'' ' 
1、第一の層(4)試験= *試験4(4-1)。
2、第二の層(3)試験*試験3 =(3-1)
。3、第層:試験(2)試験= 2 *(2-1)
。4、第四層:試験= 1(1)。
'' ' 

#2、ステップに戻る
' '' 
注意:ユーバー位置である:RES = N *試験(N-1)、それは次に下方本明細書で知られている上部後方に戻りますが、リターンを実行する
5、N- =この時間の終わり第4層機能場合1は、コード・ブロック・リターン1のコードを実行する:RET = 1。
6、。第三の機能の第四の層位置の完了は、次に層まで行われた後のリターンを呼び出します。RET = * 2 1 
。7、第3の層が第二層の折り返し位置の後にコールバック関数に戻ります:RET = 1 * 2 * 3 
図8に示すように、第二層は、コールバック関数への最初の層のリターンの位置を戻します:RET = 1 * 2 * 3 * 4 
コールは第一層の位置に達した後、上方位置は、再帰的に使用されていない、この時間だけ関数が戻る真陽性。
「」 '

    

1.3カエルジャンプステップの問題 

    参考ブログ: https://cloud.tencent.com/developer/news/44122

  図1に示すように、二段階問題

      問題:カエルは、クラス1レベルにジャンプすることができ、あなたはまた、レベル2に飛び乗っすることができます。カエルはどのように多くのジャンプのn級レベルの合計を求めて飛び込みました 

  二つのステップ(再帰関数
#!は/ usr / binに/パイソンのenv 
# - * -コーディング:UTF-8 - * - 
インポートSYSの
は、sys.setrecursionlimit(1000000000)#設定再帰のシステムの最大深度

DEF FIB(N-):
    IFのn - <= 2:
        N-リターン
    他:
        リターンFIB + FIB(2-N-)(1-N-)
プリント(FIB(4)。)5#。
  二段階の控除
#### 1、n = 1の場合にのみ、方法
#1、F(1)= 1の

ときは#### 2、n = 2の最初のステップジャンプは、この方法は、最初の2つのホップがある場合プロセスステップがある場合
#1、F(2)= 1 1 + 2 = 

####。3、最終的に押し下げる。3 = N-ジャンプステップは、F(N-1)を有するfの最後の2つのステップをジャンプ方法( 2-N-)
#F(3)= F(2)+ F(1)。3 = 

####。4、N-> 2 SO 
#のF(N)= F( N-1)+ F(N- 2)

  2、nは階段の問題

      問題:カエルは、クラス1レベルにジャンプすることができますが、また、レベル2に飛び乗っすることができます...... nはまた、ステージ上でジャンプすることができます。カエルはどのように多くのジャンプのn級レベルの合計を求めて飛び込みました

  n個のステップの問題(再帰関数)
#!は/ usr / binに/パイソンのenv 
# - * -コーディング:UTF-8 - * - 
インポートSYSの
は、sys.setrecursionlimit(1000000000)#設定再帰のシステムの最大深度

DEF FIB(N-):
    IFのn - <= 2:
        N-リターン
    他:
        リターンFIB 2 *(N - 1)
(FIB(4)。)を印刷8#。
  nは階段控除
#### 1、n = 1の場合にのみ、方法
#1、F(1)= 1の

ときは#### 2、n = 2の最初のステップジャンプは、この方法は、最初の2つのホップがある場合ステップ一の方法
#F(N)= 1 1 + 2 = 

最初のホップ、方法にレベルF(3-1)を有する####図3に示すように、最初のホップ= N-3そこF(3-2)は、2つの方法のステップは、F(3-3)がある場合、シードジャンプ最初のホップ三つのステップ
#F(n-は)= 1 + 2 3 = 

####。4、 N> 2というように
#Fを(N)= F(N - 1)+ F(N - 2)+ ...... F(0)

'' ' 
F(N)= F(N - 1) + F(N-2)+ ...... F(0) 種ジャンプ

F(N-1)= F (N-2)+ F(N-3)+···F(0 

F(N)-f(N - 1)= F(N - 1)

その結果、F(

  3、の3つの手順を発行

  質問3つの段階
#!は/ usr / binに/パイソンのenv 
# - * -コーディング:UTF-8 - * - 
インポートSYSの
は、sys.setrecursionlimit(1000000000)#設定再帰のシステムの最大深度

DEF FIB(N-):
    IFのn - <= 2:
        リターンN- 
    のelif 。== 3 N-:
        リターン4。
    他:
        リターンFIB +(-N-2)+ FIB(3-N-)FIB(1-N-)
プリント7#(FIB(4))。

1.1再帰を説明します

  1.定義

      1.関数内、あなたは他の関数を呼び出すことができます。関数が自分自身の中に自分自身を呼び出す場合は、この関数は再帰関数です。

  2、再帰的な性質

      1.明確な終了条件が存在する必要があります

      2.各エントリの再帰深く、問題の規模が前再帰と比較して低減されるべきです

      3.再帰効率は高くはないが、再帰のあまりにも多くのレベルは、関数呼び出しを入力するたびに(コンピュータに、関数呼び出しが、このデータ構造のスタック(スタック)を介して達成され、スタックオーバーフローを引き起こすことができます

          スタックは、関数戻り、毎回層スタックフレームを追加し、スタックは、一つのスタックフレームを減少します。スタックの大きさのためには無限ではないので、再帰呼び出しの数があまりにも多くのスタックオーバーフローが発生します)

1.2簡単な例は、再帰の原理を理解します

    参考ブログます。https://www.cnblogs.com/Fantinai/p/7806356.html

  1、再帰的なインスタンス

  再帰的なケース
#!は/ usr / binに/パイソンのenv 
# - * -コーディング:UTF-8 - * - 
DEF digui(NUM):
    NUM印刷
    :IF NUM> 0 
        digui(NUM - 1。)
    それ以外:
        印刷「を------ ------ ' 
    NUMプリント

diguiを(3)

' ''の実行結果
。3 
2 
1 
0 
------------ 
0 
1 
2 
3 
'' '

      1.たびに関数呼び出しの戻りがあり、一つは、代わりに(関数呼び出しの最初の部分で)メインに直接返すの1つ、再帰的に呼び出すことへの復帰です。 

      前記第1の再帰:N = 3 3 [3]の描画

      前記第2の再帰:N = 2 2描画[3,2]

      4。第3再帰:N = 1描画[3,2,1]

      5. n = 0の場合、> 0がFalseではなく、再帰、印刷NUM = 0、機能彼のレベルで呼び出し元に戻る、すなわち、n = 1つのスタック

      6.次に、位置digui(NUM - 1)下方を行う:印刷印刷NUM = 1、1スタック、スタック要素:[3,2]

      7. 2、3、およびので、右の最終的な印刷を印刷します

                

  2、解析結果

      1.なぜそれ以上の成果でしょうか?忘れるために関数自体の後にコードを呼び出す考えているので、他の後にPythonコードです。

      2.関数自体を呼び出すとき、コードが後に終了しますが、待っている状態ではありませんが、コードの実行後に、再度、対応する色で同じカラープリント()関数の文が待機Falseです。

      あなたは再帰関数のdigui(3)を呼び出したときに、次のように3再帰関数を詳細、私は再帰関数分解を行うためにこれを入れてみましょう、実装プロセスは以下のとおりです。

      

 1.2再帰的な階乗決意再帰的原則

  1、コード階乗

  コード4の階乗
#!/ usr / binに/ ENVのpython 
# - * -コーディング:UTF-8 - * - 
DEF試験(N):
    1 == N場合:
        リターン1 
    他:
        RES = N *試験(N-1)
        の印刷「N:% S ----- RET:%S」%(N、RES)
    戻りRESが

試験(4)#24印刷
''」
2 ----- RET:N 2 
、N:3 ----- RET: 6 
N:4 ----- RET:24 
24 
''」
  4の再帰的な階乗控除
#1、再帰的ステップ
'' ' 
1、第一の層(4)試験= *試験4(4-1)。
2、第二の層(3)試験*試験3 =(3-1)
。3、第層:試験(2)試験= 2 *(2-1)
。4、第四層:試験= 1(1)。
'' ' 

#2、ステップに戻る
' '' 
注意:ユーバー位置である:RES = N *試験(N-1)、それは次に下方本明細書で知られている上部後方に戻りますが、リターンを実行する
5、N- =この時間の終わり第4層機能場合1は、コード・ブロック・リターン1のコードを実行する:RET = 1。
6、。第三の機能の第四の層位置の完了は、次に層まで行われた後のリターンを呼び出します。RET = * 2 1 
。7、第3の層が第二層の折り返し位置の後にコールバック関数に戻ります:RET = 1 * 2 * 3 
図8に示すように、第二層は、コールバック関数への最初の層のリターンの位置を戻します:RET = 1 * 2 * 3 * 4 
コールは第一層の位置に達した後、上方位置は、再帰的に使用されていない、この時間だけ関数が戻る真陽性。
「」 '

    

1.3カエルジャンプステップの問題 

    参考ブログ: https://cloud.tencent.com/developer/news/44122

  図1に示すように、二段階問題

      問題:カエルは、クラス1レベルにジャンプすることができ、あなたはまた、レベル2に飛び乗っすることができます。カエルはどのように多くのジャンプのn級レベルの合計を求めて飛び込みました 

  二つのステップ(再帰関数
#!は/ usr / binに/パイソンのenv 
# - * -コーディング:UTF-8 - * - 
インポートSYSの
は、sys.setrecursionlimit(1000000000)#設定再帰のシステムの最大深度

DEF FIB(N-):
    IFのn - <= 2:
        N-リターン
    他:
        リターンFIB + FIB(2-N-)(1-N-)
プリント(FIB(4)。)5#。
  二段階の控除
#### 1、n = 1の場合にのみ、方法
#1、F(1)= 1の

ときは#### 2、n = 2の最初のステップジャンプは、この方法は、最初の2つのホップがある場合プロセスステップがある場合
#1、F(2)= 1 1 + 2 = 

####。3、最終的に押し下げる。3 = N-ジャンプステップは、F(N-1)を有するfの最後の2つのステップをジャンプ方法( 2-N-)
#F(3)= F(2)+ F(1)。3 = 

####。4、N-> 2 SO 
#のF(N)= F( N-1)+ F(N- 2)

  2、nは階段の問題

      問題:カエルは、クラス1レベルにジャンプすることができますが、また、レベル2に飛び乗っすることができます...... nはまた、ステージ上でジャンプすることができます。カエルはどのように多くのジャンプのn級レベルの合計を求めて飛び込みました

  n個のステップの問題(再帰関数)
#!は/ usr / binに/パイソンのenv 
# - * -コーディング:UTF-8 - * - 
インポートSYSの
は、sys.setrecursionlimit(1000000000)#設定再帰のシステムの最大深度

DEF FIB(N-):
    IFのn - <= 2:
        N-リターン
    他:
        リターンFIB 2 *(N - 1)
(FIB(4)。)を印刷8#。
  nは階段控除
#### 1、n = 1の場合にのみ、方法
#1、F(1)= 1の

ときは#### 2、n = 2の最初のステップジャンプは、この方法は、最初の2つのホップがある場合ステップ一の方法
#F(N)= 1 1 + 2 = 

最初のホップ、方法にレベルF(3-1)を有する####図3に示すように、最初のホップ= N-3そこF(3-2)は、2つの方法のステップは、F(3-3)がある場合、シードジャンプ最初のホップ三つのステップ
#F(n-は)= 1 + 2 3 = 

####。4、 N> 2というように
#Fを(N)= F(N - 1)+ F(N - 2)+ ...... F(0)

'' ' 
F(N)= F(N - 1) + F(N-2)+ ...... F(0) 種ジャンプ

F(N-1)= F (N-2)+ F(N-3)+···F(0 

F(N)-f(N - 1)= F(N - 1)

その結果、F(

  3、の3つの手順を発行

  質問3つの段階
#!は/ usr / binに/パイソンのenv 
# - * -コーディング:UTF-8 - * - 
インポートSYSの
は、sys.setrecursionlimit(1000000000)#設定再帰のシステムの最大深度

DEF FIB(N-):
    IFのn - <= 2:
        リターンN- 
    のelif 。== 3 N-:
        リターン4。
    他:
        リターンFIB +(-N-2)+ FIB(3-N-)FIB(1-N-)
プリント7#(FIB(4))。

おすすめ

転載: www.cnblogs.com/bokeyuanan/p/12549186.html