最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#遞歸算法和排列算法

 更新時間:2022年05月05日 08:13:18   作者:農(nóng)碼一生  
這篇文章介紹了C#的遞歸算法和排列算法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

一、遞歸算法

遞歸:你打開面前這扇門,看到屋里面還有一扇門。你走過去,發(fā)現(xiàn)手中的鑰匙還可以打開它,你推開門,發(fā)現(xiàn)里面還有一扇門,你繼續(xù)打開它。若干次之后,你打開面前的門后,發(fā)現(xiàn)只有一間屋子,沒有門了。然后,你開始原路返回,每走回一間屋子,你數(shù)一次,走到入口的時候,你可以回答出你到底用這你把鑰匙打開了幾扇門。

循環(huán):你打開面前這扇門,看到屋里面還有一扇門。你走過去,發(fā)現(xiàn)手中的鑰匙還可以打開它,你推開門,發(fā)現(xiàn)里面還有一扇門(若前面兩扇門都一樣,那么這扇門和前兩扇門也一樣;如果第二扇門比第一扇門小,那么這扇門也比第二扇門小,你繼續(xù)打開這扇門,一直這樣繼續(xù)下去直到打開所有的門。但是,入口處的人始終等不到你回去告訴他答案。

1、定義:

在數(shù)學與計算機科學中,遞歸(Recursion)是指在函數(shù)的定義中使用函數(shù)自身的方法。實際上,遞歸,顧名思義,其包含了兩個意思:遞 和 歸,這正是遞歸思想的精華所在。

2、實例:

static void  Main(string[] args)
{
    int[] sum = new int[30];
    for (int i = 0; i < sum.Length; i++)
    {
        sum[i] = process1(i);
        Console.WriteLine(sum[i]);
    }
}
public static int process1(int a)
{
    if (a == 0 || a == 1) return 1;

    return process1(a - 1) + process1(a - 2);
}

3、階乘算法:

public static int process2(int n)
{
    if (n == 1) return 1;

    return n * process2(n - 1); // 相同重復邏輯,縮小問題的規(guī)模
}

二、排列算法

輸出任意個字母和數(shù)字的全排列

對于一個長度為n的串或者n個字符(數(shù)字、節(jié)點)組成的字符串數(shù)組,它的全排列共有A(n, n)=n!種。這個問題也是一個遞歸的問題。如1,2,3,全排列可得到:{123,132,213,231,312,321}。

用遞歸算法實現(xiàn)代碼如下:

      public static void Permutation(string[] nums, int m, int n)
      {
         string t;
         if (m < n - 1)
         {
            Permutation(nums, m + 1, n);
            for (int i = m + 1; i < n; i++)
            {
               //可抽取Swap方法
               t = nums[m];
               nums[m] = nums[i];
               nums[i] = t;
               Permutation(nums, m + 1, n);

               //可抽取Swap方法
               t = nums[m];
               nums[m] = nums[i];
               nums[i] = t;
            }
         }
         else
         {
                #region 存放到List
                Node root = null;
                Node currentNode;
                for (int j = 0; j < nums.Length; j++)
                {
                    currentNode = new Node(nums[j]);
                    currentNode.nextNode = root;
                    root = currentNode;
                }
                NodeList.Add(root);
                #endregion


                #region  打印控制臺
                for (int j = 0; j < nums.Length; j++)
                {
                    Console.Write(nums[j]);
                }
                Console.WriteLine();

                #endregion
         }
      }

調(diào)用算法:

      static void Main(string[] args)
      {
         Nums = new string[] { "a", "b", "c" };
         Permutation(Nums, 0, Nums.Length);
         Console.ReadKey();
      }

到此這篇關(guān)于C#算法之遞歸和排列的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

玉林市| 伊宁市| 通辽市| 缙云县| 九台市| 阜南县| 岱山县| 灵武市| 敦化市| 江西省| 正镶白旗| 岳普湖县| 扶余县| 曲周县| 堆龙德庆县| 当阳市| 定安县| 勃利县| 清河县| 惠安县| 大竹县| 商城县| 常山县| 资阳市| 娄底市| 响水县| 九龙县| 堆龙德庆县| 修文县| 保亭| 宿迁市| 霍林郭勒市| 禹城市| 鹤山市| 龙里县| 布尔津县| 扎囊县| 梁河县| 林甸县| 独山县| 涟源市|