美文网首页程序员
C#实现斐波那契数列整理

C#实现斐波那契数列整理

作者: 快乐泥巴 | 来源:发表于2018-07-27 13:44 被阅读0次

     斐波那契数列:{1,1,2,3,5,8,13,21...}

    1. 递归算法,耗时最长的算法,效率很低。
    public static long CalcA(int n)
    {
        if (n <= 0) return 0;
        if (n <= 2) return 1;
        return checked(CalcA(n - 2) + CalcA(n - 1));
    }
    
    1. 通过循环来实现
    public static long CalcB(int n)
    {
        if (n <= 0) return 0;
        var a = 1L;
        var b = 1L;
        var result = 1L;
        for (var i = 3; i <= n; i++)
        {
            result = checked(a + b);
            a = b;
            b = result;
        }
        return result;
    }
    
    1. 通过循环的改进写法
    public static long CalcC(int n)
    {
        if (n <= 0) return 0;
        var a = 1L;
        var b = 1L;
        for (var i = 3; i <= n; i++)
        {
            b = checked(a + b);
            a = b - a;
        }
        return b;
    }
    
    1. 通用公式法
    /// <summary>
    /// F(n)=(1/√5)*{[(1+√5)/2]^n - [(1-√5)/2]^n}
    /// </summary>
    /// <param name="n"></param>
    /// <returns></returns>
    public static long CalcD(int n)
    {
        if (n <= 0) return 0;
        if (n <= 2) return 1;  //加上,可减少运算。
        var a = 1 / Math.Sqrt(5);
        var b = Math.Pow((1 + Math.Sqrt(5)) / 2, n);
        var c = Math.Pow((1 - Math.Sqrt(5)) / 2, n);
        return checked((long)(a * (b - c)));
    }
    

    OK,就这些了。用的long类型来存储结果,当n>92时会内存溢出。

    相关文章

      网友评论

        本文标题:C#实现斐波那契数列整理

        本文链接:https://www.haomeiwen.com/subject/lrkwmftx.html