全排列递归算法

全排列比较常见的用于暴力破解,以下是常见的递归算法:

Length的值确定全排列的个数

1、判断数组长度是否达到Length的值,如果达到则结束,如果没达到做步骤2。

2、向数组添从小到大(不超过Length)添加一个数(添加前检查该数是否已经添加)。

3、调用步骤1(递归调用)。

class Program
    {
        private static readonly int Lengh = 3;
        static void Main(string[] args)
        {
            List<int> a = new List<int>();
            fun(a);
        }

        public static void fun(List<int> a)
        {
            if (a.Count == Lengh)
            {
                for (int i = 0; i < a.Count; i++)
                {
                    Console.Write(a[i] + "  ");
                }
                Console.WriteLine();
            }
            else
            {
                for (int i = 1; i <= Lengh; i++)
                {
                    if (CheckAdd(i, a))
                    {
                        a.Add(i);
                        fun(a);
                        a.RemoveAt(a.Count - 1);
                    }
                }
            }
        }

        private static bool CheckAdd(int i, List<int> a)
        {
            for (int k = 0; k < a.Count; k++)
            {
                if (a[k] == i)
                {
                    return false;
                }
            }
            return true;
        }
    }
原文地址:https://www.cnblogs.com/xiaoxueyong/p/5278571.html