Fibonaci的递归与非递归实现的差别

来源:互联网 发布:港行iphone8支持网络 编辑:程序博客网 时间:2024/05/07 02:45

递归是一种功能,开始学时要理解系统怎样实现递归,然后以后写程序时就只需要找出一种递归“思路”就行了,不必再深究函数具体的实现步骤。

我们在用递归思路解决问题时,要根据递归的系统实现来考虑什么问题改用递归,什么问题不该用递归。
因为递归运行的内存消耗与 Recursive Tree (递归树)的deepth 有关,所以象Fibonaci 数列这种问题就不适合用递归。
现在就让我们看一下用递归与非递归实现Fibonaci的性能差别吧:

#include <iostream>
#include <ctime> // 因为要计算运行时间,所以需要调用cctime 里的 time( & time_t ) , double difftime( time_t , time_t )
using namespace std;

long fibonaci ( int n ) {
 if ( n == 1 || n == 0 ) return n ;
 else return fibonaci( n-1) + fibonaci( n-2) ;
}

long fibo( int n) {
 if ( n<2) return n;
 int p = 1, q = 1;
 int temp;
 for ( int i = 3; i<=n; ++i ) {
  temp = q;
  q = p+q;
  p = temp; }
 return q;
}

int main() {
 time_t start, end;
 int n;
 double diff;
 cout<<"Input the number to take factorial "<<endl;
 cin>>n;

 time( & start );
 cout<<fibonaci ( n );
 time( & end );
 cout<<" Recursive function takes " << difftime( end, start ) <<" seconds "<<endl;

 time( & start );
 cout<<fibo ( n );
 time( & end );
 cout<<" Iterative function takes " << difftime( end, start ) <<" seconds "<<endl;

 return main(); // 为了作完后不退出,继续执行main()函数
 system( "pause" );
}

 

为了避免计算结果越界,所以我选了 35 , 执行结果如下:
Input the number to take factorial
35
9227465 Recursive func takes 2 seconds
9227465 Iterative func takes 0 seconds
Input the number to take factorial

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 微信被盗密码被改了怎么办 微信被盗了密码都被改了怎么办 微信被别人改密码改手机号了怎么办 微信号手机号码换了密码改了怎么办 电信充值卡的密码刮花了怎么办 qq充了q币不到账怎么办 开通黄钻不支持手机话费开通怎么办 银行卡给红包充值迟迟不到账怎么办 我想用信用卡往微信零钱充钱怎么办 修改密保手机跳过原手机验证怎么办 骏卡有用但是充不进去怎么办 在云南移动上充错话费了怎么办 手机版本太低安装不了支付宝怎么办 手机下载支付宝后找不到了怎么办 王者荣耀充值成功游戏未到账怎么办 银行卡号和密码都忘了怎么办 微信支付密码和银行卡号忘了怎么办 请问5位数的密码忘记了怎么办 苹果手机四位数密码忘记了怎么办 锡山教育app登陆密码忘了怎么办 新商盟手机订烟登录忘记密码怎么办 在qq上修改支付密码忘记怎么办 微信红包支付密码忘了怎么办 qq钱包绑定了别人的银行卡怎么办 用支付宝充手机话费怎么退款怎么办 我有个qq号丢了怎么办 微信红包密码输错了怎么办 qq钱包支付限额付不了款怎么办 电信手机没开流量被扣流量钱怎么办 运动鞋子买大了一码怎么办 淘宝直播间粉丝福利购优惠券怎么办 微信卡包的券不小心删了怎么办 0pp0手机官网手机总跳屏怎么办 很想买一部手机但是舍不得钱怎么办 自己没钱了还想贷款买手机怎么办 4g手机锁屏密码忘了怎么办 oppo手机锁屏密码忘了怎么办 三星手机锁屏密码忘了怎么办 网上买的手机想退了怎么办 沙棘排湿排毒后皮肤痒怎么办 做了沙棘排毒两次上上痒怎么办?