欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#遞歸算法和排列算法

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

一、遞歸算法

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

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

1、定義:

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

2、實(shí)例:

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); // 相同重復(fù)邏輯,縮小問(wèn)題的規(guī)模
}

二、排列算法

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

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

用遞歸算法實(shí)現(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  打印控制臺(tái)
                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#算法之遞歸和排列的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論