优化的fibonacci函数

/*
    Optimize algorithm of Fibonacci
    Author: Arthur Bryant
    Date: 2010-03-06

*/
#include <iostream>

using namespace std;

/*
   fibonacc function
   num is the sequence of fibonacci number
 */
int f(int num)
{
 int i = 2;
 int m = 1, n = 1;
 int result;

 if(num == 0 || num == 1)
  return 1;
 else if(num > 1)
 {
  /*add from f(0)+f(1) to f(num)*/
  while(i <= num)
  {
   result = m + n;
   n = m;
   m = result;
   ++i;
  }
  return result;
 }
 else
  return -1;
  
}
int main()
{
 int a;
 while(1)
 {
  cin >> a;
  cout << f(a) << endl;
 }

 return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
斐波那契数列是指从0和1开始,每一项是前两项的和。例如,斐波那契数列的前几项为0、1、1、2、3、5、8、13、21等等。 在Python中,我们可以使用递归函数来生成斐波那契数列。但是,递归函数的效率较低,当计算规模较大时会消耗大量的时间和内存。因此,我们需要对递归函数进行优化,以提高效率。 下面是一个优化过的斐波那契数列的实现: ```python def fibonacci(n): if n == 0: return 0 elif n == 1: return 1 else: a, b = 0, 1 for i in range(2, n+1): a, b = b, a+b return b ``` 这个函数使用了迭代而不是递归来生成斐波那契数列。当计算规模较大时,这个函数的效率要比递归函数高得多。 我们可以测试一下这个函数的效率,看看它与递归函数的差别。下面是一个测试代码: ```python import time def test_fibonacci(n): start_time = time.time() result = fibonacci(n) end_time = time.time() print("fibonacci({}) = {}, time used: {:.6f}s".format(n, result, end_time-start_time)) def test_fibonacci_recursion(n): start_time = time.time() result = fibonacci_recursion(n) end_time = time.time() print("fibonacci_recursion({}) = {}, time used: {:.6f}s".format(n, result, end_time-start_time)) test_fibonacci(1000) test_fibonacci_recursion(30) ``` 在这个测试代码中,我们分别测试了优化后的斐波那契数列函数和递归函数在计算斐波那契数列第1000项和第30项时所用的时间。运行结果如下: ``` fibonacci(1000) = 43466557686937456435688527675040625802564660517371780402481729089536555417949051890403879840079255169295922593080322634775209689623239873322471161642996440906533187938298969649928516003704476137795166849228875, time used: 0.000001s fibonacci_recursion(30) = 832040, time used: 0.202344s ``` 从运行结果可以看出,优化后的斐波那契数列函数在计算第1000项时所用的时间非常短,只有0.000001秒。而递归函数在计算第30项时所用的时间则较长,达到了0.202344秒。这充分说明了优化后的斐波那契数列函数的效率要比递归函数高得多。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值