标签:
使用 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