递归与while循环的区别

本文对比分析了递归与while循环的特点,通过求1+2+3+...+n的和的例子展示了两种方法的代码实现。递归使代码更简洁,但空间消耗大,适合解决复杂问题逐步简化为基本问题;循环则更快速,结构简单,适用于大部分场景。文章还介绍了迭代和遍历的概念,并讨论了它们在编程中的应用。

1、引入

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

两者的代码比较

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

答:递归代码:

 public static int Fun(int n){  

    if(n == 1){  

        return 1;  

    }  

    else {  

        return n + Fun(n-1);  

    }  

} 

while循环代码:

public class me{

public static void main(String[] args){

int sum=0;

int i=1;

while(i<=n){

sum+=i;

i++;

}

System.Out.println("sum="+sum);

2、两者的概念比较

2-1、递归(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)就是基线条件,这似乎就是人们所说的“出口”。基线条件就是函数没必要再循环下去了。

在这里插入图片描述

2-2、循环(loop)

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

这个简单,不再赘述。

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

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

2-3、优缺点比较

方法优点缺点
递归代码更简洁清晰,可读性更好。由于递归需要系统堆栈,所以空间消耗要比非递归代码要大很多。而且,如果递归深度太大,可能系统撑不住。
循环速度快,结构简单并不能解决所有的问题

2-4、使用范围比较

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

3、迭代和遍历。

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

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

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

在这里插入图片描述

4、参考

转载自【算法】递归与while循环的区别:https://blog.csdn.net/Beyond_2016/article/details/81283054

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值