递归调用实例分析2.在函数中间的递归与在函数尾部的递归

本文探讨了递归调用的两种类型:函数尾部递归和函数中间递归。指出函数尾部的递归可通过循环替代,但可能增加计算负担;而函数中间的递归可能无法直接转换为循环。递归在二叉树运算中常见,但也可能导致效率低下,例如斐波那契数列。文章强调在使用递归时要考虑是否有必要,有时循环可能是更好的选择。并举例阶乘计算来说明递归简化运算的情况。
摘要由CSDN通过智能技术生成

    上一篇最后给出了用递归完成字符串逆置的代码,但是没有分析它的具体算法,今天做了如'abcde'字符串递归翻转的图跟大家分享(画的比较烂,具体思路还是有的,详情见附件)

    这里的递归调用没有出现在函数末尾,二前面几个递归都出现在函数末尾,所以说递归可以分为在函数末尾的递归与在函数中的递归。其差别如下。

        1.在函数尾部的递归,都可以用循环的方式做下去,这样的递归大多数情况只能造成代码的简洁,并不利于机器的运算。

        2.在函数中间的递归,不一定能用循环的方式做下去,这样的递归有的可以转化成在函数末尾的递归,有的并不能。如上一篇所写的两种形式的代码,把再函数中间的递归转化成了在函数末尾的递归。

        3.递归调用多用于二叉树的运算中,在函数中用递归可能会造成程序的低效,如斐波那契数列的求解(a1=1,a2=1,an=an-1+an-2......)实现代码如下:

int fib(int n)
{
         int result;
         int pre_result;
         int next_older_result;
        result = pre_result = 1;
         while (n > 2)
        {
                 n -= 1;
                next_older_result = pre_result;
                pre_result = result;
                result = pre_res
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值