C#,斯特林数(Stirling Number)的算法与源代码

C#,斯特林数(Stirling Number)的算法与源代码_第1张图片

1 斯特林数

在组合数学,斯特林数可指两类数,第一类斯特林数和第二类斯特林数,都是由18世纪数学家James Stirling提出的。它们自18世纪以来一直吸引许多数学家的兴趣,如欧拉、柯西、西尔沃斯特和凯莱等。后来哥本哈根(Copenhagen)大学的尼尔森(Niels Nielsen,1865-1931)提出了"Stirlingschen Zahlen erster Art" [第一类斯特林数]和"Stirlingschen Zahlen zweiter Art" [第二类斯特林数],首次把这两类数冠以「斯特林数」之名 。

更多知识课阅读百度百科:

百度百科《斯特林数》icon-default.png?t=N7T8https://baike.baidu.com/item/%E6%96%AF%E7%89%B9%E6%9E%97%E6%95%B0/4938529?fr=aladdin

2 计算结果

C#,斯特林数(Stirling Number)的算法与源代码_第2张图片

 (一类斯特林数)源程序:

3 源代码

using System;

namespace Legalsoft.Truffer.Algorithm
{
    public static partial class Number_Sequence
    {
        private static long Factorial(int n)
        {
            if (n == 0)
            {
                return 1;
            }
            if (n < 0)
            {
                return -1;
            }
            long res = 1;
            for (int i = 2; i < (n + 1); i++)
            {
                res *= i;
            }
            return res;
        }

        private static int Combination(int n, int r)
        {
            if (r > n)
            {
                return -1;
            }
            if (n == r)
            {
                return 1;
            }
            if (r == 0)
            {
                return 1;
            }
            return Combination(n - 1, r - 1) + Combination(n - 1, r);
        }

        public static long Stirling_Number(int r, int n)
        {
            if (n > r)
            {
                return -1;
            }
            if (n == 0)
            {
                return 0;
            }
            if (r == n)
            {
                return 1;
            }
            if (n == 1)
            {
                return Factorial(r - 1);
            }
            if (r - n == 1)
            {
                return Combination(r, 2);
            }
            else
            {
                return Stirling_Number(r - 1, n - 1) + (r - 1) * Stirling_Number(r - 1, n);
            }
        }
    }
}
 

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

POWER BY TRUFFER.CN

4 代码格式

using System;

namespace Legalsoft.Truffer.Algorithm
{
    public static partial class Number_Sequence
    {
        private static long Factorial(int n)
        {
            if (n == 0)
            {
                return 1;
            }
            if (n < 0)
            {
                return -1;
            }
            long res = 1;
            for (int i = 2; i < (n + 1); i++)
            {
                res *= i;
            }
            return res;
        }

        private static int Combination(int n, int r)
        {
            if (r > n)
            {
                return -1;
            }
            if (n == r)
            {
                return 1;
            }
            if (r == 0)
            {
                return 1;
            }
            return Combination(n - 1, r - 1) + Combination(n - 1, r);
        }

        public static long Stirling_Number(int r, int n)
        {
            if (n > r)
            {
                return -1;
            }
            if (n == 0)
            {
                return 0;
            }
            if (r == n)
            {
                return 1;
            }
            if (n == 1)
            {
                return Factorial(r - 1);
            }
            if (r - n == 1)
            {
                return Combination(r, 2);
            }
            else
            {
                return Stirling_Number(r - 1, n - 1) + (r - 1) * Stirling_Number(r - 1, n);
            }
        }
    }
}

 

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