Algorithme récursif à 6 chaînes inversées en récursivité complexe

Les algorithmes récursifs complexes nécessitent un certain traitement pendant le processus d'appel récursif de fonctions, telles que l'enregistrement ou la modification des valeurs d'éléments. Les chaînes inversées, la décomposition japonaise et le problème de la tour de Hanoi sont tous des algorithmes récursifs compliqués.

Inverser une chaîne
Utilisez la récursivité pour inverser une chaîne et la stocker dans la chaîne d'origine.

【une analyse】

En supposant que la chaîne est stockée dans le tableau s, le prototype de la fonction récursive est le suivant:

int RevStr (char s [], int i);

Pour inverser le caractère à la position actuelle, vous devez trouver la position de stockage dans la chaîne actuelle après l'inversion. La fonction lit d'abord le caractère à la position actuelle dans une variable ch. Si le caractère à la position actuelle est le caractère de fin, la fonction renvoie 0, indiquant au dernier appel récursif à la fonction que le dernier caractère doit être stocké dans la première position de la chaîne. Code:

char ch = s [i];
if (ch == '\ 0')
    renvoie 0;


Dans les autres cas, la fonction appelle de manière récursive RevStr avec la chaîne s et la position de caractère i + 1 comme paramètres, trouve la position de stockage k du caractère courant et stocke le caractère à la position k. En même temps, la position suivante est utilisé pour stocker le caractère précédent. Code:

k = RevStr (s, i + 1);
s [k] = ch;
retourne k + 1;

Code:

#include<stdio.h>
int RevStr(char s[], int i);
void main()
{
	char s[] = "Welcome to Northeast University!";
	printf("颠倒前:%s\n", s);
	RevStr(s, 0);
	printf("颠倒后:%s\n", s);
	getchar();
}
int RevStr(char s[], int i)
{
	int k;
	char ch = s[i];
	if (ch == '\0')
		return 0;
	else
	{
		k = RevStr(s, i + 1);
		s[k] = ch;
		return k + 1;
	}
}

résultat:


 

Je suppose que tu aimes

Origine blog.csdn.net/baidu_36669549/article/details/104141681
conseillé
Classement