Maison > développement back-end > C++ > Comment les fonctions récursives peuvent-elles être utilisées pour générer toutes les permutations d'une chaîne ou d'un entier?

Comment les fonctions récursives peuvent-elles être utilisées pour générer toutes les permutations d'une chaîne ou d'un entier?

Patricia Arquette
Libérer: 2025-01-30 08:26:12
original
517 Les gens l'ont consulté

How Can Recursive Functions Be Used to Generate All Permutations of a String or Integer?

Générer la chaîne et la disposition des entiers

Un défi de programmation commun consiste à énumérer tous les arrangements possibles de la chaîne ou de l'entier donné. Ce problème doit être résolu.

Logique d'arrangement

Le noyau logique derrière l'arrangement est très simple:

La disposition de l'élément unitaire est l'élément lui-même.

    Pour un ensemble d'éléments, chaque arrangement est la série de chaque arrangement de n'importe quel élément et des autres éléments.
  1. Solution récursive

La fonction de récursivité suivante génère disposée: (Ici, nous devons insérer le même bloc de code que le texte d'origine, mais le décrire dans un langage plus naturel)

La fonction récursive génère toutes les dispositions possibles en itérant la disposition de chaque élément et les éléments restants. Lorsqu'il n'y a qu'un seul élément, la récursivité se termine et l'élément lui-même est disposé.

C # implémentation

La fonction C # suivante est générée efficacement pour générer efficacement toute la disposition de la chaîne donnée et construit chaque arrangement à partir d'un arrangement plus petit par récursivement:

Cette fonction génère tous les arrangements en s'appelant récursivement et utilise

des caractères d'échange de fonctions pour générer différentes combinaisons d'arrangement.

fournit un résultat de sortie plus clair.

class Program
{
    public static void GetPer(char[] list)
    {
        int x = list.Length - 1;
        GetPer(list, 0, x);
    }

    private static void GetPer(char[] list, int k, int m)
    {
        if (k == m)
        {
            Console.WriteLine(new string(list)); // 使用更清晰的输出方式
        }
        else
            for (int i = k; i <= m; i++)
            {
                   Swap(ref list[k], ref list[i]);
                   GetPer(list, k + 1, m);
                   Swap(ref list[k], ref list[i]);
            }
    }

    static void Swap(ref char a, ref char b)
    {
        char temp = a;
        a = b;
        b = temp;
    }

    static void Main()
    {
        string str = "sagiv";
        char[] arr = str.ToCharArray();
        GetPer(arr);
    }
}
Copier après la connexion
Cette fonction génère efficacement toutes les dispositions possibles de la chaîne donnée et construit chaque arrangement par récursivement à partir d'une disposition plus petite.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal