LoginSignup
3
0

More than 3 years have passed since last update.

fibonatch 数列の50番目を出力するプログラムをC# で書いてみました。

Last updated at Posted at 2019-10-17

以前会社でチーム内で誰が早くフィボナッチ数列の計算をプログラミングで行えるか
という遊びの中で書いたやつです。
チームメンバーは各々得意な言語を使って行いましたが、私の場合はElixirでの環境を用意できず。C#で書かせていただきました。

ルールは
フィボナッチ数列50番目の数字を100000回計算させてその後出力させる。

というやつでした。

面白いので皆さんチーム内でやってみてはいかがでしょうか。

c#

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Stopwatch watch = new Stopwatch();
            watch.Start();

            for (int i = 0; i < 100000; i++) {
                fib(50);
            }
            watch.Stop();
            Console.WriteLine("time" + watch.Elapsed);
            Console.WriteLine(fib(50));


            Console.Read();
        }
        static UInt64 fib(int n)
        {
            UInt64 fib01,fib02;
                fib01 = 0;
                fib02 = 1;
            for (int i = 1; i < n; i++)
            {
                UInt64 a = fib01 + fib02;
                fib01 = fib02;
                fib02 = a;
            }
            return fib02;
        }


    }
}

Elixir

Elixir で50番目を求めるまでやった時のコード
実際に環境を用意できなかったけれども書いては見ました


defmodule Memorize do
  def fib 0 do
    0
  end

  def fib 1 do
    1
  end

  def fib x do
    case Agent.get(:fib_memo, &Map.get(&1, x)) do
      nil ->
        v = fib(x - 1) + fib(x - 2)
        Agent.update(:fib_memo, &Map.put(&1, x, v))
        v

      v -> v
    end
  end

  def start_agent do
    Agent.start_link &Map.new/0, name: :fib_memo
  end
end


Memorize.start_agent
IO.inspect Memorize.fib 100000

チーム内での結果としてはC++が予想通り速く、案外早かったのはPHP7でした。
厳密にやると色々変わってきそうですがお遊び程度で制限時間を作ってやってみると面白いかもしれません。

ではまた

僕のギスト
https://gist.github.com/ProblemaResolt/716d7a5ed466e72cd80e1edf1cc2e5b9

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0