zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

c#算法 number 源代码
2023-09-11 14:15:48 时间

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

Henry Dealnnoy

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

Dealnnoy Number的计算公式:

 计算结果:

 源程序:

using System;

namespace Legalsoft.Truffer.Algorithm
{
	/// <summary>
	/// Dealnnoy Number
	/// 德兰诺依数,德兰诺伊数
	/// </summary>
	public static partial class Number_Sequence
	{
		/// <summary>
		/// 德兰诺伊数(Dealnnoy Number)的原始(递归)算法
		/// n >= m
		/// </summary>
		/// <param name="n"></param>
		/// <param name="m"></param>
		/// <returns></returns>
		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);
        }

		/// <summary>
		/// 德兰诺伊数(Dealnnoy Number)的改良(非递归)算法
		/// </summary>
		/// <param name="n"></param>
		/// <param name="m"></param>
		/// <returns></returns>
		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