Définition récursive
Une fonction s'appelle directement ou indirectement
Jetons un coup d'œil à un paragraphe bien rédigé
"Lorsqu'une fonction est appelée alors qu'une autre fonction est en cours d'exécution, le système doit effectuer trois choses avant d'exécuter la fonction appelée:
(1) Passez tous les paramètres réels, l'adresse de retour et d'autres informations à la fonction appelée pour enregistrer
(2) Allouer une zone de stockage pour les variables locales de la fonction appelée
(3) Contrôle de transfert à la fonction appelante en fonction de l'adresse de retour enregistrée par la fonction appelée
Lorsqu'il y a plusieurs fonctions qui constituent des appels imbriqués, selon le principe de l'appel après le premier retour, le transfert d'informations et le transfert de contrôle entre les fonctions susmentionnées doivent être réalisés à travers la pile, c'est-à-dire que le système organise les données l'espace requis par l'ensemble du programme lors de son exécution. Dans une pile, chaque fois qu'une fonction est appelée, une zone de stockage est allouée en haut de la pile. Lorsqu'une fonction se termine, sa zone de stockage est libérée. La zone de données de la fonction en cours d'exécution doit être en haut de la pile. "——" Structure des données et algorithme ", Yan Weimin
La phrase ci-dessus convient à la fonction A pour appeler la fonction B, et la fonction A pour appeler la fonction A [c'est-à-dire la récursivité ] est la même raison
Il existe de nombreuses classifications récursives, qui peuvent être comprises à travers des exemples
Quelques exemples de récursivité
Exemple 1: Utilisez la récursivité pour trouver la somme de 1 + 2 + 3 + ...... + 100
#include <stdio.h>
/*递归法求1+2+3+...+100啊*/
int f(int n)
{
if (n == 1)
return 1;
else
return f(n-1) + n;
}
int main(void)
{
printf("%d", f(100));
return 0;
}
Exemple 2: Trouver la factorielle (peut être écrite en boucle ou récursivement)
① Trouvez la méthode factorielle par boucle
#include <stdio.h>
/*循环法求阶乘*/
int f(int n)
{
int fac = 1;
int i;
if (n == 0)
return 0;
for (i = 1; i <= n; i++)
fac = fac * i;
return fac;
}
int main(void)
{
printf("%d", f(2));
return 0;
}
② Méthode récursive pour trouver factorielle
#include <stdio.h>
/*递归法求阶乘啊*/
int f(int n)
{
if (n == 1)
return 1;
else
return f(n-1)*n;
}
int main(void)
{
printf("%d", f(4));
return 0;
}
Exemple 3:
La tour de Hanoi
Exemple 4:
Marcher dans le labyrinthe