2009/04/07

[C#][リハビリ]Numbers Gamesの最初の方をC#

現在少しだけC#のリハビリ中です。

Schemeのシンタックスに親しみすぎました

 

Numbers Games(加減乗算乗除を再帰でやろうというとってもおもしろい話)

ここでは加減乗までしかできていません。(思い出せません)。割り算むじー。あとおまけで階乗。

using System;

namespace NumbersGames
{
    class Class1
    {
        /// <summary>
        /// 1を加算する
        /// </summary>
        /// <param name="n"></param>
        /// <returns></returns>
        static int Add1 (int n)
        {
            return n + 1;
        }

        /// <summary>
        /// 1を減算する
        /// </summary>
        /// <param name="n"></param>
        /// <returns></returns>
        static int Sub1 (int n)
        {
            return n - 1;
        }

        /// <summary>
        /// nにmを加算する
        /// </summary>
        /// <param name="n"></param>
        /// <param name="m"></param>
        /// <returns></returns>
        static int Plus (int n, int m)
        {
            return m == 0
                ? n
                : Add1(Plus (n, Sub1(m)));
        }

        /// <summary>
        /// nからmを減算する
        /// </summary>
        /// <param name="n"></param>
        /// <param name="m"></param>
        /// <returns></returns>
        static int Minus (int n, int m)
        {
            return m == 0
                ? n
                : Sub1(Minus (n, Sub1(m)));
        }

        /// <summary>
        /// 階乗
        /// </summary>
        /// <param name="n"></param>
        /// <returns></returns>
        static int Fact (int n)
        {
            return n == 0
                ? 1
                : n * Fact(n - 1);
        }

        [STAThread]
        static void Main(string[] args)
        {
            int p = Plus(1, 2);
            // 3

            int p2 = Plus(100, 12345);
            // 12445

            int m = Minus(2, 1);
            // 1

            int m2 = Minus(10000, 1234);
            // 8766

            int f = Fact(5);
            // 120

            int f2 = Fact(10);
            // 3628800
        }
    }
}

0 件のコメント:

コメントを投稿