Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah fungsi rekursif boleh digunakan untuk menjana semua permutasi rentetan atau integer?

Bagaimanakah fungsi rekursif boleh digunakan untuk menjana semua permutasi rentetan atau integer?

Patricia Arquette
Patricia Arquetteasal
2025-01-30 08:26:12522semak imbas

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

menghasilkan rentetan dan susunan integer

Cabaran pengaturcaraan yang biasa adalah untuk menyenaraikan semua kemungkinan mengatur rentetan atau integer yang diberikan. Masalah ini perlu diselesaikan.

logik susunan

teras logik di belakang susunannya sangat mudah:

Pengaturan elemen unit adalah elemen itu sendiri.

    Untuk satu set elemen, setiap susunan adalah siri setiap susunan elemen dan unsur -unsur lain.
  1. Penyelesaian Rekursif

Fungsi rekursi berikut menghasilkan diatur: (di sini kita harus memasukkan blok kod yang sama seperti teks asal, tetapi terangkannya dalam bahasa yang lebih semula jadi)

Fungsi rekursif menghasilkan semua pengaturan yang mungkin dengan melelehkan susunan setiap elemen dan elemen yang selebihnya. Apabila terdapat hanya satu elemen, rekursi berakhir, dan elemen itu sendiri disusun.

c# pelaksanaan

Fungsi C#berikut dijana dengan cekap untuk menghasilkan semua susunan rentetan yang diberikan dengan cekap, dan membina setiap susunan dari susunan yang lebih kecil dengan rekursif:

Fungsi ini menghasilkan semua pengaturan dengan memanggil semula sendiri, dan menggunakan

fungsi pertukaran fungsi untuk menghasilkan kombinasi susunan yang berbeza.

menyediakan hasil output yang lebih jelas.

<code class="language-csharp">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);
    }
}</code>
Fungsi ini berkesan menghasilkan semua susunan rentetan yang diberikan, dan membina setiap susunan dengan rekursif dari susunan yang lebih kecil.

Atas ialah kandungan terperinci Bagaimanakah fungsi rekursif boleh digunakan untuk menjana semua permutasi rentetan atau integer?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn