2.5 Structure des données et sujet récursif d'algorithme [à mettre à jour]

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

 

 

 

 

 

 

 

 

Je suppose que tu aimes

Origine blog.csdn.net/weixin_43450646/article/details/107480086
conseillé
Classement