锁定老帖子 主题:闲来无聊,改写斐波那契算法
精华帖 (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; } |
|
返回顶楼 | |
发表时间:2010-07-28
试试数学通项公式函数的
function y = Fib(n) sr5 = sqrt(5); y = uint32((((1 + sr5) / 2) ^ n - ((1 - sr5) / 2) ^ n) / sr5); end |
|
返回顶楼 | |
发表时间:2010-07-28
闲得蛋痛啊
|
|
返回顶楼 | |
发表时间: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); } |
|
返回顶楼 | |
发表时间:2010-10-20
没看出神奇在哪 这个不就是非递归的方式吗
循环里面就是swap两个数而已 a = a + b; b = a - b; a = a - b; 就可以swap a和b了 |
|
返回顶楼 | |
发表时间:2010-12-06
斐波那契算法 是有O(LogN)的解法的 利用矩阵相乘 |
|
返回顶楼 | |
发表时间: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)都会要人命的,精度问题难以解决 |
|
返回顶楼 | |
发表时间:2011-03-18
这个有什么意义?上矩阵乘法或者通项公式 :@
|
|
返回顶楼 | |
发表时间: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; } } } |
|
返回顶楼 | |