プログラミングとかブログ

Unity/C#/SRPGStudio/RPGツクールMVの情報とかその他気になったことを調べて書きます。

【C#】等差数列と等比数列を生成するメソッド

初項と公差・公比と項数を渡すと数列をListで返します。

class Model
{
    /// <summary>
    /// 等差数列を生成するメソッド an = a1 + (n-1)d
    /// </summary>
    /// <param name="start">初項</param>
    /// <param name="difference">公差</param>
    /// <param name="maxGenerateNumber">項数n</param>
    /// <returns></returns>
    public List<int> GetArithmeticProgression(int start, int difference, int maxGenerateNumber)
    {
        var list = new List<int>();
        for (int n = 1; n <= maxGenerateNumber; n++)
            list.Add(start + (n - 1) * difference);

        return list;

    }

    /// <summary>
    /// 等比数列を生成するメソッド an = a1 * r**(n-1)
    /// </summary>
    /// <param name="start">初項</param>
    /// <param name="ratio">公比</param>
    /// <param name="maxGenerateNumber">項数n</param>
    /// <returns></returns>
    public List<int> GetGeometricProgression(int start, int ratio, int maxGenerateNumber)
    {
        var list = new List<int>();
        for (int n = 1; n <= maxGenerateNumber; n++)
            list.Add(start * (int)Math.Pow(ratio, n - 1));

        return list;

    }

}

使い方

初項-10、公差7の等差数列-10+(n-1)*7と、初項2、公比3の等比数列2*3^{n-1}を作ります。
項数はどちらも5です。

class Program
    {
        static void Main(string[] args)
        {
            var model = new Model();
            model.GetArithmeticProgression(-10, 7, 5).Select((p, i) => new { Content = p, Index = i })
                .ToList().ForEach(ano => Console.WriteLine("n=" + (ano.Index + 1) + " " + ano.Content));

            Console.WriteLine();

            model.GetGeometricProgression(2, 3, 5).Select((p, i) => new { Content = p, Index = i })
                .ToList().ForEach(ano => Console.WriteLine("n=" + (ano.Index + 1) + " " + ano.Content));

            Console.ReadLine();
        }
    }