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
Lepaskan: 2025-01-30 08:26:12
asal
518 orang telah melayarinya

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.

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);
    }
}
Salin selepas log masuk
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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan