python python récursives

récursion python

 

1.1 récursive expliquer

  1. Définitions

      1. A l'intérieur de la fonction, vous pouvez appeler d'autres fonctions. Si une fonction elle-même appelle en elle-même, cette fonction est une fonction récursive.

  2, la nature récursive

      1. Il doit y avoir une condition définitive de fin

      2. Chaque récursive d'entrée plus profonde, l'ampleur du problème devrait être réduit par rapport à la précédente récursive

      3. L'efficacité récursive est pas élevé, trop de niveaux de récursion peut causer un débordement de pile (dans l'ordinateur, l'appel de fonction est assurée par la pile (stack) cette structure de données, chaque fois que la saisie d'un appel de fonction,

          Stack ajouterait un des cadres de pile de couche, chaque fois que la fonction retourne, la pile sera réduite d'un cadre de pile. En raison de la taille de la pile n'est pas infinie, de sorte que le nombre d'appels récursifs trop se traduira par un débordement de pile)

1.2 exemple simple pour comprendre le principe de récursif

    Blog de référence: https: //www.cnblogs.com/Fantinai/p/7806356.html

  1, les instances récursives

  cas récursif
#! / Usr / bin / Python env 
# - * - codage: 8 UTF- - * -. 
DEF digui (NUM): 
    Imprimer NUM 
    SI NUM> 0: 
        digui (NUM - 1.) 
    L'autre: 
        Imprimer « ------ ------ ' 
    Imprimer NUM 

digui (. 3) 

' '' résultat de l' exécution 
. 3 
2 
. 1 
0 
------------ 
0 
. 1 
2 
. 3 
'' '

      1. Chaque fois il y a un retour des appels de fonction, et on est un retour à l'appelant récursive celui-là, au lieu de retourner directement au principal (dans la première partie de l'appel de fonction). 

      2. La première récursion: n = 3 3 [3] Dessin

      3. La seconde récursion: n = 2 2 Dessin [3, 2]

      4. Troisième récursion: n = 1 1 Dessin [3,2,1]

      5. Lorsque n = 0, 0> 0 est faux, pas récursive, impression num = 0, la fonction retourne à l'appelant à son niveau, à savoir, n = 1 pile

      6. Ensuite, le digui de position (num - 1) effectue une baisse: Une copie d'impression num = 1, la pile 1, les éléments de pile: [3,2]

      7. 2, 3, et il imprime l'impression finale à droite

                

  2, les résultats d'analyse

      1. Pourquoi les résultats de ce qui précède il? Parce que le code considéré appelant après la fonction elle-même à oublier, est le code python après les autres.

      2. Lorsque vous appelez la fonction elle-même, le code ne se termine pas, mais dans l'état d'attente est faux, puis de nouveau après l'exécution du code, la déclaration de la fonction même impression couleur () attend la couleur correspondante.

      3. Permettez-moi de ce faire une décomposition de fonction récursive, détaillée fonction récursive, lorsque vous appelez un digui de fonction récursive (3), le processus de mise en œuvre suit comme:

      

 1.2 détermination factoriel récursive principe récursif

  1, la factorielle de code

  Code 4 factoriel
#! / usr / bin / python env 
# - * - codage: utf-8 - * - 
def test (n): 
    si n == 1: 
        retour 1 d' 
    autre: 
        res = n * test (n-1) 
        print « n:% s ----- ret:% "% s (n, res) 
    res de retour 

imprimer test (4) # 24 
'' » 
n: 2 ----- ret: 2 
n: 3 ----- ret: 6 
n: 4 ----- ret: 24 
24 
'' »
  déduction factoriel récursive de 4
N ° 1, l' étape récursive 
'' ' 
1, une première couche: (. 4) Test = * Test 4 (4-1). 
2, une deuxième couche: (. 3). Essai * Test 3 = (3-1) 
. 3, la troisième couche: test (2) test = 2 * (2-1) 
. 4, la quatrième couche: test 1 = (1.). 
'' ' 

# 2, retourne à l' étape 
' '' 
note: la position Über est la suivante : res = n * test (n-1), il revient alors au retour arrière connu vers le bas supérieure ici des préformes 
5, n = 1 va ensuite exécuter le code dans le retour du bloc de code 1 si la fin de cette période , les fonctions de quatrième couche:... RET = 1 
. 6, après l' achèvement de la quatrième position de couche de la troisième fonction est alors effectué vers le bas pour les appels de la couche de retour: RET = 1 * 2. 
7, la troisième couche va revenir à la fonction d' appel après que la position de retour de la seconde couche. ret = 1 * 2 * 3 
8, la deuxième couche va revenir à la fonction d' appel de la position du retour de la première couche: ret = 1 * 2 * 3 * 4 
après l'appel atteint la position de la première couche, la position supérieure non utilisée de manière récursive, cette fois seulement la fonction retourne vrai positif . 
« » '

    

1.3 Problèmes étape de saut de grenouille 

    Blog de référence: https://cloud.tencent.com/developer/news/44122

  1, problème en deux étapes

      Problème: grenouille A peut sauter sur un niveau de classe 1, vous pouvez également sauter sur le niveau 2. La grenouille a sauté la recherche d' un total de niveau de qualité n combien de sauts 

  Deux étapes (fonction récursive )
#! / Usr / bin / Python env 
# - * - codage. UTF- 8 - * - 
Importation SYS 
sys.setrecursionlimit (1000000000) # Régler la profondeur maximale du système de récursion 

DEF FIB (n): 
    IF n - <= 2: 
        retour n 
    l'autre : 
        retour FIB (. 1-n) + FIB (2-n) 
. impression (. FIB (4)) 5 #
  Deux déduction étape
#### 1, n = 1 uniquement lorsque Procédé 
# f (1) = 1 

Lorsque #### 2, n = 2 lorsque le premier saut de pas, il existe un procédé, lorsque les deux premiers houblon quand une étape de procédé a un 
# f (2) =. 1. 1 + 2 = 

####. 3, la dernière poussée vers le bas. 3 = n-saut à l' étape a un f (n-1) un saut de procédé deux dernières étapes f ( 2-n) 
# F (. 3) = F (2) + F (. 1). 3 = 

####. 4, n> 2 , de sorte 
# f (n) = f ( n-1) + f (n- 2)

  2, n problème d'escaliers

      Problème: grenouille A peut sauter sur un niveau, vous pouvez également sauter de classe 1 au niveau 2 ...... n Il peut également sauter sur scène. La grenouille a sauté la recherche d' un total de niveau de qualité n combien de sauts

  Les problèmes des étapes n (fonction récursive)
#! / Usr / bin / Python env 
# - * - codage. UTF- 8 - * - 
Importation SYS 
sys.setrecursionlimit (1000000000) # Régler la profondeur maximale du système de récursion 

DEF FIB (n): 
    IF n - <= 2: 
        retour n 
    l'autre : 
        retour FIB 2 * (. n-- 1) 
Imprimer (. FIB (4)) 8 #.
  la déduction n
#### 1, n = 1 uniquement lorsque Procédé 
# f (1) = 1 

Lorsque #### 2, n = 2 lorsque le premier saut de pas, il existe un procédé, lorsque les deux premiers houblon une méthode lorsqu'une étape 
# F (n) =. 1. 1 + 2 = 

#### 3, lorsque le premier saut = n-3 a un f de niveau (3-1) dans le procédé, lorsque le premier saut y f (3-2) lorsque les deux étapes de procédé, il y a f (03/03) lorsque la semence saute premier saut trois étapes 
# F (n) =. 1 + 2 = 3 

#### 4., n> 2 et ainsi de suite 
# F (n) = F (n-- 1.) + F (n - 2) + ...... F (0) 

'' ' 
F (n) = F (. n-- 1) + f (n-2) + ...... f (0) les espèces sauts 

f (n-1) = f (n-2) + f (n-3) + ..... f (0 ) 

f (n) -f (n--. 1) = f (n--. 1) de 

telle sorte que f (

  3, numéro trois étapes

  La question trois étapes
#! / Usr / bin / Python env 
# - * - codage. UTF- 8 - * - 
Importation SYS 
sys.setrecursionlimit (1000000000) # Régler la profondeur maximale du système de récursion 

DEF FIB (n): 
    IF n - <= 2: 
        retour n 
    Elif . == 3 n-: 
        retour 4. 
    l'autre: 
        retour FIB FIB + (n-2) + FIB (3-n). (1-n). 
Print 7 # (FIB (4).).

1.1 récursive expliquer

  1. Définitions

      1. A l'intérieur de la fonction, vous pouvez appeler d'autres fonctions. Si une fonction elle-même appelle en elle-même, cette fonction est une fonction récursive.

  2, la nature récursive

      1. Il doit y avoir une condition définitive de fin

      2. Chaque récursive d'entrée plus profonde, l'ampleur du problème devrait être réduit par rapport à la précédente récursive

      3. L'efficacité récursive est pas élevé, trop de niveaux de récursion peut causer un débordement de pile (dans l'ordinateur, l'appel de fonction est assurée par la pile (stack) cette structure de données, chaque fois que la saisie d'un appel de fonction,

          Stack ajouterait un des cadres de pile de couche, chaque fois que la fonction retourne, la pile sera réduite d'un cadre de pile. En raison de la taille de la pile n'est pas infinie, de sorte que le nombre d'appels récursifs trop se traduira par un débordement de pile)

1.2 exemple simple pour comprendre le principe de récursif

    Blog de référence: https: //www.cnblogs.com/Fantinai/p/7806356.html

  1, les instances récursives

  cas récursif
#! / Usr / bin / Python env 
# - * - codage: 8 UTF- - * -. 
DEF digui (NUM): 
    Imprimer NUM 
    SI NUM> 0: 
        digui (NUM - 1.) 
    L'autre: 
        Imprimer « ------ ------ ' 
    Imprimer NUM 

digui (. 3) 

' '' résultat de l' exécution 
. 3 
2 
. 1 
0 
------------ 
0 
. 1 
2 
. 3 
'' '

      1. Chaque fois il y a un retour des appels de fonction, et on est un retour à l'appelant récursive celui-là, au lieu de retourner directement au principal (dans la première partie de l'appel de fonction). 

      2. La première récursion: n = 3 3 [3] Dessin

      3. La seconde récursion: n = 2 2 Dessin [3, 2]

      4. Troisième récursion: n = 1 1 Dessin [3,2,1]

      5. Lorsque n = 0, 0> 0 est faux, pas récursive, impression num = 0, la fonction retourne à l'appelant à son niveau, à savoir, n = 1 pile

      6. Ensuite, le digui de position (num - 1) effectue une baisse: Une copie d'impression num = 1, la pile 1, les éléments de pile: [3,2]

      7. 2, 3, et il imprime l'impression finale à droite

                

  2, les résultats d'analyse

      1. Pourquoi les résultats de ce qui précède il? Parce que le code considéré appelant après la fonction elle-même à oublier, est le code python après les autres.

      2. Lorsque vous appelez la fonction elle-même, le code ne se termine pas, mais dans l'état d'attente est faux, puis de nouveau après l'exécution du code, la déclaration de la fonction même impression couleur () attend la couleur correspondante.

      3. Permettez-moi de ce faire une décomposition de fonction récursive, détaillée fonction récursive, lorsque vous appelez un digui de fonction récursive (3), le processus de mise en œuvre suit comme:

      

 1.2 détermination factoriel récursive principe récursif

  1, la factorielle de code

  Code 4 factoriel
#! / usr / bin / python env 
# - * - codage: utf-8 - * - 
def test (n): 
    si n == 1: 
        retour 1 d' 
    autre: 
        res = n * test (n-1) 
        print « n:% s ----- ret:% "% s (n, res) 
    res de retour 

imprimer test (4) # 24 
'' » 
n: 2 ----- ret: 2 
n: 3 ----- ret: 6 
n: 4 ----- ret: 24 
24 
'' »
  déduction factoriel récursive de 4
N ° 1, l' étape récursive 
'' ' 
1, une première couche: (. 4) Test = * Test 4 (4-1). 
2, une deuxième couche: (. 3). Essai * Test 3 = (3-1) 
. 3, la troisième couche: test (2) test = 2 * (2-1) 
. 4, la quatrième couche: test 1 = (1.). 
'' ' 

# 2, retourne à l' étape 
' '' 
note: la position Über est la suivante : res = n * test (n-1), il revient alors au retour arrière connu vers le bas supérieure ici des préformes 
5, n = 1 va ensuite exécuter le code dans le retour du bloc de code 1 si la fin de cette période , les fonctions de quatrième couche:... RET = 1 
. 6, après l' achèvement de la quatrième position de couche de la troisième fonction est alors effectué vers le bas pour les appels de la couche de retour: RET = 1 * 2. 
7, la troisième couche va revenir à la fonction d' appel après que la position de retour de la seconde couche. ret = 1 * 2 * 3 
8, la deuxième couche va revenir à la fonction d' appel de la position du retour de la première couche: ret = 1 * 2 * 3 * 4 
après l'appel atteint la position de la première couche, la position supérieure non utilisée de manière récursive, cette fois seulement la fonction retourne vrai positif . 
« » '

    

1.3 Problèmes étape de saut de grenouille 

    Blog de référence: https://cloud.tencent.com/developer/news/44122

  1, problème en deux étapes

      Problème: grenouille A peut sauter sur un niveau de classe 1, vous pouvez également sauter sur le niveau 2. La grenouille a sauté la recherche d' un total de niveau de qualité n combien de sauts 

  Deux étapes (fonction récursive )
#! / Usr / bin / Python env 
# - * - codage. UTF- 8 - * - 
Importation SYS 
sys.setrecursionlimit (1000000000) # Régler la profondeur maximale du système de récursion 

DEF FIB (n): 
    IF n - <= 2: 
        retour n 
    l'autre : 
        retour FIB (. 1-n) + FIB (2-n) 
. impression (. FIB (4)) 5 #
  Deux déduction étape
#### 1, n = 1 uniquement lorsque Procédé 
# f (1) = 1 

Lorsque #### 2, n = 2 lorsque le premier saut de pas, il existe un procédé, lorsque les deux premiers houblon quand une étape de procédé a un 
# f (2) =. 1. 1 + 2 = 

####. 3, la dernière poussée vers le bas. 3 = n-saut à l' étape a un f (n-1) un saut de procédé deux dernières étapes f ( 2-n) 
# F (. 3) = F (2) + F (. 1). 3 = 

####. 4, n> 2 , de sorte 
# f (n) = f ( n-1) + f (n- 2)

  2, n problème d'escaliers

      Problème: grenouille A peut sauter sur un niveau, vous pouvez également sauter de classe 1 au niveau 2 ...... n Il peut également sauter sur scène. La grenouille a sauté la recherche d' un total de niveau de qualité n combien de sauts

  Les problèmes des étapes n (fonction récursive)
#! / Usr / bin / Python env 
# - * - codage. UTF- 8 - * - 
Importation SYS 
sys.setrecursionlimit (1000000000) # Régler la profondeur maximale du système de récursion 

DEF FIB (n): 
    IF n - <= 2: 
        retour n 
    l'autre : 
        retour FIB 2 * (. n-- 1) 
Imprimer (. FIB (4)) 8 #.
  la déduction n
#### 1, n = 1 uniquement lorsque Procédé 
# f (1) = 1 

Lorsque #### 2, n = 2 lorsque le premier saut de pas, il existe un procédé, lorsque les deux premiers houblon une méthode lorsqu'une étape 
# F (n) =. 1. 1 + 2 = 

#### 3, lorsque le premier saut = n-3 a un f de niveau (3-1) dans le procédé, lorsque le premier saut y f (3-2) lorsque les deux étapes de procédé, il y a f (03/03) lorsque la semence saute premier saut trois étapes 
# F (n) =. 1 + 2 = 3 

#### 4., n> 2 et ainsi de suite 
# F (n) = F (n-- 1.) + F (n - 2) + ...... F (0) 

'' ' 
F (n) = F (. n-- 1) + f (n-2) + ...... f (0) les espèces sauts 

f (n-1) = f (n-2) + f (n-3) + ..... f (0 ) 

f (n) -f (n--. 1) = f (n--. 1) de 

telle sorte que f (

  3, numéro trois étapes

  La question trois étapes
#! / Usr / bin / Python env 
# - * - codage. UTF- 8 - * - 
Importation SYS 
sys.setrecursionlimit (1000000000) # Régler la profondeur maximale du système de récursion 

DEF FIB (n): 
    IF n - <= 2: 
        retour n 
    Elif . == 3 n-: 
        retour 4. 
    l'autre: 
        retour FIB FIB + (n-2) + FIB (3-n). (1-n). 
Print 7 # (FIB (4).).

Je suppose que tu aimes

Origine www.cnblogs.com/bokeyuanan/p/12549186.html
conseillé
Classement