Application de la pensée récursive

Application de la pensée récursive

Introduction à la pensée récursive

La pensée récursive convient pour résoudre «un problème peut être décomposé étape par étape, et les sous-problèmes décomposés ont la même méthode de résolution de problème que le problème», mais la pensée récursive n'est pas une itération illimitée, mais nous oblige à spécifier un «problème de base» "Le problème de base, comme son nom l'indique, signifie" jusqu'où devons-nous décomposer le problème ".

Séquence de Fibonacci

Le principe de la séquence de Fibonacci

 

Implémentation du code de la séquence de Fibonacci

#include <iostream>  
using namespace std;  
  
int fibonacci(int n)  
{  
    if (n == 1 || n == 0) // 基问题  
    {  
        return 1;  
    }  
    else if (n >= 2) // 这一系列问题的解决方法  
    {  
        return fibonacci(n - 1) + fibonacci(n - 2);  
    }  
    return 0;  
}  
  
int main()  
{  
    cout << fibonacci(18) << endl;  
}

  

Résoudre pour le plus grand diviseur commun

Réflexion théorique sur la résolution du plus grand diviseur commun

La méthode de division par tour et tour est également appelée algorithme euclidien, qui est un algorithme très ancien pour résoudre le plus grand diviseur commun de deux nombres. Il est basé sur le principe: deux entiers positifs a et b (a> b), leur plus grand commun diviseur pgcd est égal au plus grand commun diviseur entre le reste r et b de la division de a par b. Par exemple, le plus grand diviseur commun 5 de 10 et 25 est égal au reste de 25 divisé par 10 et au plus grand diviseur commun de 5 et 10; par exemple, le plus grand diviseur commun de 51 et 21 est égal au reste de 51 divisé par 21, le plus grand diviseur commun de 9 et 21, Le plus grand diviseur commun de 9 et 21 est 3. Selon les principes ci-dessus, le flux de l'algorithme de la méthode de lancer et de division peut être le suivant:

Étape 1: Calculez le reste r de a et b.

Étape 2: Si r vaut 0, renvoie pgcd = b Sinon, passez à l'étape 3.

Étape 3: utilisez la valeur de b pour mettre à jour la valeur de a, utilisez le reste r pour mettre à jour la valeur de b, passez à l'étape 1.

Exemple de code pour résoudre le plus grand diviseur commun

#include <iostream>  
using namespace std;  
  
int GCD(int m, int n)  
{  
    if (n == 0) // 当被除数为0说明最大公约数为m  
    {  
        return m;  
    }  
    return GCD(n, m%n); // 返回被除数与余数的最大公约数  
}  
  
int main()  
{  
    cout << GCD(19, 3) << endl;  
}  

 

Analyse de code

La première partie du code est "déterminer le problème de base pour ce problème d'itération":

  1. if  (n == 0)  //  Lorsque le dividende est 0, le plus grand diviseur commun est m  
  2. {  
  3.     return  m;  

La deuxième partie du code est "déterminer la méthode que nous voulons itérer":

return GCD(n, m%n); // 返回被除数与余数的最大公约数

Ce code montre: l'étape suivante consiste à résoudre le plus grand diviseur commun de «dividende n» et «reste m% n».

Réalisation récursive de la recherche binaire

Le principe de la dichotomie

https://blog.csdn.net/weixin_45590473/article/details/108683727

Exemple de code de dichotomie utilisant la récursivité

#include <iostream>  
using namespace std;  
  
bool BinarySearch(int a[], int L, int H, int value)  
{  
    int Middle{ (L + H) / 2 };  
  
    if (H < L) // 基问题  
    {  
        return -1;  
    }  
  
    if (a[Middle] == value) // 基问题  
    {  
        return 1;  
    }  
    else if (a[Middle] > value) // 解决方法  
    {  
        return BinarySearch(a, Middle + 1, H, value);  
    }  
    else if (a[Middle] < value) // 解决方法  
    {  
        return BinarySearch(a, L, Middle - 1, value);  
    }  
}  
  
int main()  
{  
    int a[] = { 1,2,3,4,5 };  
    cout << BinarySearch(a, 0, 4, 2) << endl;  
}  

 

Analyse de code

Pour le dire clairement, le problème de base est "la solution du problème le plus basique". Pour l'algorithme d'arbre binaire, il y a deux situations: "trouver l'élément spécifié" et "ne peut pas trouver l'élément spécifié". Correspondant au code suivant:

    if (H < L) // 基问题  
    {  
        return -1;  
    }  
  
    if (a[Middle] == value) // 基问题  
    {  
        return 1;  
    } 

 

Nous ajustons le retour de recherche en comparant la valeur médiane dans la plage de recherche avec la valeur cible:

else if (a[Middle] > value) // 解决方法  
{  
    H = Middle;  
    return BinarySearch(a, L, H, value);  
}  
else if (a[Middle] < value) // 解决方法  
{  
    L = Middle;  
    return BinarySearch(a, L, H, value);  
}  

 

 

Je suppose que tu aimes

Origine blog.csdn.net/weixin_45590473/article/details/108715703
conseillé
Classement