论坛首页 综合技术论坛

闲来无聊,改写斐波那契算法

浏览 8116 次
精华帖 (0) :: 良好帖 (2) :: 新手帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-07-28  
    public long fib(int index) {
        long sum = 1, x = 1;
        if (index > 2) {
            for (int i = 0; i < index - 2; i++) {
                sum += x;
                x = sum - x;
            }
        }
        return sum;
    }
0 请登录后投票
   发表时间:2010-07-28  
试试数学通项公式函数的
function y = Fib(n)
    sr5 = sqrt(5);
    y = uint32((((1 + sr5) / 2) ^ n - ((1 - sr5) / 2) ^ n) / sr5);
end
0 请登录后投票
   发表时间:2010-07-28  
闲得蛋痛啊
0 请登录后投票
   发表时间:2010-07-30  
public int fib(int n){
if(n==1)
   return 0;
if(n==2)
   return 1;
return fib(n-1)+fib(n-2);
}
0 请登录后投票
   发表时间:2010-10-20  
没看出神奇在哪 这个不就是非递归的方式吗
循环里面就是swap两个数而已
a = a + b;
b = a - b;
a = a - b;
就可以swap a和b了
0 请登录后投票
   发表时间:2010-12-06  

斐波那契算法

是有O(LogN)的解法的

利用矩阵相乘

0 请登录后投票
   发表时间:2011-01-04  
cleanerje 写道
试试数学通项公式函数的
function y = Fib(n)
    sr5 = sqrt(5);
    y = uint32((((1 + sr5) / 2) ^ n - ((1 - sr5) / 2) ^ n) / sr5);
end


如果没有处理无理数运算的工具,一个sqrt(5)都会要人命的,精度问题难以解决
0 请登录后投票
   发表时间:2011-03-18  
这个有什么意义?上矩阵乘法或者通项公式 :@
0 请登录后投票
   发表时间:2011-05-16  
wandou 写道
请运行f(1000),一秒钟能算出来的算法才算合格。

不知道是不是我对 斐波那契 的理解失误!?反正这样能打印出结果。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            for (int i = 0; i < 50; i++)
                Console.WriteLine(fib(i));
            Console.ReadLine();
        }

        public static ulong fib(int i)
        {
            ulong a, b;
            a = b = 1;

            for (int j = 0; j < i; j++)
                if (j % 2 == 0)
                    a += b;
                else
                    b += a;

            return a > b ? a : b;
        }
    }
}
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics