C#,德兰诺依数(Dealnnoy Number)的算法与源代码

1 Dealnnoy Number 德兰诺依数,德兰诺伊数

德兰诺依数是以法国军官、业余数学家亨利·德兰诺依(Henry Dealnnoy)的名字命名。

C#,德兰诺依数(Dealnnoy Number)的算法与源代码_第1张图片

Henry Dealnnoy

在组合数学中,德兰诺依数描述了从(0,0)到(m,n)的格路问题中,
只允许按照(0,1)、(1,0)或者(1,1)的方式来走,一共有多少不同的方案数。

Dealnnoy Number的计算公式:

C#,德兰诺依数(Dealnnoy Number)的算法与源代码_第2张图片

 计算结果:

C#,德兰诺依数(Dealnnoy Number)的算法与源代码_第3张图片

 源程序:

2 文本格式

using System;

namespace Legalsoft.Truffer.Algorithm
{
    ///


    /// Dealnnoy Number
    /// 德兰诺依数,德兰诺伊数
    ///

    public static partial class Number_Sequence
    {
        ///
        /// 德兰诺伊数(Dealnnoy Number)的原始(递归)算法
        /// n >= m
        ///

        ///
        ///
        ///
        public static int Dealnnoy_Number(int n, int m)
        {
            if (m == 0 || n == 0)
            {
                return 1;
            }
            return Dealnnoy_Number(m - 1, n - 1) +
                   Dealnnoy_Number(m - 1, n) +
                   Dealnnoy_Number(m, n - 1);
        }

        ///


        /// 德兰诺伊数(Dealnnoy Number)的改良(非递归)算法
        ///

        ///
        ///
        ///
        public static int Dealnnoy_Number_Second(int n, int m)
        {
            int[,] dp = new int[m + 1, n + 1];
            // 原文错误!
            for (int i = 0; i <= m; i++)
            {
                dp[i, 0] = 1;
            }
            for (int i = 0; i <= n; i++)
            {
                dp[0, i] = 1;
            }
            for (int i = 1; i <= m; i++)
            {
                for (int j = 1; j <= n; j++)
                {
                    dp[i, j] = dp[i - 1, j] + dp[i - 1, j - 1] + dp[i, j - 1];
                }
            }
            return dp[m, n];
        }
    }
}

————————————————————

POWER BY TRUFFER.CN

3 代码格式

using System;

namespace Legalsoft.Truffer.Algorithm
{
    /// 
    /// Dealnnoy Number
    /// 德兰诺依数,德兰诺伊数
    /// 
    public static partial class Number_Sequence
    {
        /// 
        /// 德兰诺伊数(Dealnnoy Number)的原始(递归)算法
        /// n >= m
        /// 
        /// 
        /// 
        /// 
        public static int Dealnnoy_Number(int n, int m)
        {
            if (m == 0 || n == 0)
            {
                return 1;
            }
            return Dealnnoy_Number(m - 1, n - 1) +
                   Dealnnoy_Number(m - 1, n) +
                   Dealnnoy_Number(m, n - 1);
        }

        /// 
        /// 德兰诺伊数(Dealnnoy Number)的改良(非递归)算法
        /// 
        /// 
        /// 
        /// 
        public static int Dealnnoy_Number_Second(int n, int m)
        {
            int[,] dp = new int[m + 1, n + 1];
            // 原文错误!
            for (int i = 0; i <= m; i++)
            {
                dp[i, 0] = 1;
            }
            for (int i = 0; i <= n; i++)
            {
                dp[0, i] = 1;
            }
            for (int i = 1; i <= m; i++)
            {
                for (int j = 1; j <= n; j++)
                {
                    dp[i, j] = dp[i - 1, j] + dp[i - 1, j - 1] + dp[i, j - 1];
                }
            }
            return dp[m, n];
        }
    }
}

 

你可能感兴趣的:(C#算法演义,Algorithm,Recipes,c#,算法)