码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-11-09 14:04:53      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:递归与循环   字符串逆置递归算法核心   

    上一篇最后给出了用递归完成字符串逆置的代码,但是没有分析它的具体算法,今天做了如‘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_result + next_older_result;
        }
         return result;
}

         如果令n=50,机器会跑得很慢。

         然而有些算法就是用递归的方式定义的,如求一个数的阶乘实现代码如下

int factorial(int n)
{
         int result = 1;
         while (n > 1)
        {
                result *= n ;
                 n -= 1;
        }
         return result;
}

         这样极大的简便了运算。

    简而言之,递归的调用需要谨慎,有时候循环比递归更简便,运用递归是需思量,是否有更简便的循环。

如有不足希望批评指正  

本文出自 “pawnsir的IT之路” 博客,请务必保留此出处http://10743407.blog.51cto.com/10733407/1710972

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

标签:递归与循环   字符串逆置递归算法核心   

原文地址:http://10743407.blog.51cto.com/10733407/1710972

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!