谨慎使用C的递归

本文通过斐波那契数列的例子揭示了递归在C语言中可能导致的效率问题。递归计算Fibonacci数列时,重复计算次数惊人,如Fibonacci(30)中Fibonacci(3)被计算了317811次,造成巨大资源浪费。当递归导致大量堆栈消耗和低效率时,应避免使用。文中提出了非递归实现Fibonacci数列的高效方法,强调在非必要情况下不应选择递归实现。
摘要由CSDN通过智能技术生成

斐波那契数列(Fibonacci)的定义如下:

抽象为函数:

 

这种递归形式的定义容易误导人使用递归来实现,但是真的该使用递归吗?

   每个递归调用都会触发另外2个递归调用,而这2个调用的任何一个又将触发2个递归调用,再接下去的调用也是如此。这样,冗余计算的数量增长的非常快。

n = 10时,函数调用54次,其中n为3的调用就有21次。

当n=30时,等了一会,终于打印完了,时间主要花在打印上,但是也足以说明这个调用次数之多,总共调用了832039次,其中n为3的调用317811次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值