SOUI官方论坛

 找回密码
 立即注册
查看: 743|回复: 0

【算法】递归与while循环的通俗比较

[复制链接]
  • TA的每日心情
    开心
    7 天前
  • 签到天数: 942 天

    [LV.10]以坛为家III

    580

    主题

    1340

    帖子

    2万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    28797
    发表于 2019-12-4 21:54:35 | 显示全部楼层 |阅读模式
    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
    本文链接:https://blog.csdn.net/充值SOUI币bl/article/details/76733215
    引入

    说起循环,我们大多会想到“递归、迭代、遍历”等几个词,具体的含义请看本文附录。今天只结合具体例子说一说递归和while循环的比较。

    两者的代码比较

    问:求1+2+3+…+n的和,请用两种方法写出代码?

    答:
    1. public static int Fun(int n){  
    2.         if(n == 1){  
    3.             return 1;  
    4.         }  
    5.         else {  
    6.             return n + Fun(n-1);  
    7.         }  
    8.     }
    复制代码
    while循环代码:
    1. public class me{
    2.             public static void main(String[] args){
    3.             int sum=0;
    4.             int i=1;
    5.             while(i<=n){
    6.             sum+=i;
    7.             i++;
    8.                 }
    9.             System.Out.println("sum="+sum);  
    复制代码
    两者的概念比较

    递归(recursion):在函数内调用自身,将复杂情况逐步转化成基本情况。有网友说:递归就是包子馅包子,它的极限就是馒头。仔细想想,哈哈,就是这么个理儿。递归分为线性递归和尾递归。

    举个栗子,已知f(2)=3,f(n)=f(n-1)+n,求f(5)?

    答:f(5)=f(4)+5=f(3)+4+5=f(2)+3+4+5=15

    怎么样,当发现自己在高中时就利用过递归思想,有没有一种原来自己从小就这么厉害了的自豪感。

    这里的f(2)就是基线条件,这似乎就是人们所说的“出口”。基线条件就是函数没必要再循环下去了。
    1.jpg

    循环(loop):在满足条件的情况下,重复执行同一段代码,比如while语句。

    这个简单,不再赘述。

    综上。看到一个网友这样描述两者:递归就像小明要去楼顶取东西,从一楼开始爬,看,不是的,继续爬,每层楼梯看上去都一样,但1到2,2到3的楼梯是两个楼梯,等到了楼顶,取到东西,不能直接跳楼跳下来,还得从楼顶一层层退回来。

    而while循环,就像驴子拉磨,无论跑多少次,都是在原地。变化的只是磨盘里的磨的东西,而不是驴每圈所在的不同位置。

    优缺点比较

    递归

    优点:代码更简洁清晰,可读性更好。

    缺点:由于递归需要系统堆栈,所以空间消耗要比非递归代码要大很多。而且,如果递归深度太大,可能系统撑不住。

    循环

    优点:速度快,结构简单

    缺点:并不能解决所有的问题

    使用范围比较

    循环能干的事,递归都能干;递归能干的事,循环不一定能干。如果使用循环并不困难的话,最好使用循环。

    附录

    循环和递归在上面已说,在此不再赘述。下面说说迭代和遍历。

    迭代(iterate):在数学中:在多次循环中逐步接近结果。

               在编程中:按顺序访问一个列表中的每一项。适用于线性结构,如数组和队列

    遍历(traversal):按规则访问结构中的每一项,且每项只访问一次。适用于非线性结构,如树,图。

    小结

    (1)至于两者的转换,又是另一个问题了。

    (2)对递归的真正理解,还需在真正使用中体会。

    (3)感谢广大网友给的参考。
    20170805214424472.jpg


    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|SOUI官方论坛

    GMT+8, 2024-5-5 07:19

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表