码迷,mamicode.com
首页 > 其他好文 > 详细

费波那也数列的非递归实现

时间:2015-08-05 16:20:58      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:

  • n =0, f(0) = 0;
  • n = 1, f(1) = 1
  • n > 1, f(n) = f(n-1) + f(n-2)

使用 2 个临时变量,存储 n-1 和 n-2 的费波那也数;
f(2) = f(0) + f(1) ,因此用f(2) 覆盖 f(0) ,因为 f(1) 仍然需要保留;即 f(0) = f(0) + f(1)
f(3) = f(1) + f(2) , 因此用f(3) 覆盖 f(1) ,因为 f(2) 仍然需要保留;即 f(1) = f(1) + f(0)
如上所示,偶数 n 的费波那也数存于 f(0); 奇数 n 的费波那也数存于 f(1)

long Fibonacci(unsigned int n) {
    long result[2] = {0, 1};
    for (int i = 2; i <= n; i++) {
        unsigned int index = (i & 0x01); // 2存于 result[0],因为存储1的 result[1]还要使用
        result[index] = result[index] + result[1-index];
    }
    return result[n & 0x01];
}

long Fibonacci2(unsigned int n)
{
    long result[2] = {0, 1};
    long Fib_n;
    for (int i = 2; i <= n; i++) {
        Fib_n = result[0] + result[1];
        result[0] = result[1];
        result[1] = Fib_n;
    }
    return Fib_n;
}

相关问题:青蛙跳台阶,可以跳 1 级或跳 2 级,跳到第 n 级台阶,有几种方式。

版权声明:本文为博主原创文章,未经博主允许不得转载。

费波那也数列的非递归实现

标签:

原文地址:http://blog.csdn.net/quzhongxin/article/details/47298397

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!