递归和迭代(浅理解)

递归和迭代

其实本文主要还是理解递归,但说到递归,就一定会和迭代产生关系,那么我们就先来说说迭代

迭代

百度的官方解释是:

迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。
对计算机特定程序中需要反复执行的子程序*(一组指令),进行一次重复,即重复执行程序中的循环,直到满足某条件为止,亦称为迭代。

那么我们可以这样理解:迭代在程序中就是循环,目的是一步步的逼近结果。

递归

百度的官方解释是:

程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。

据此,我们可以理解为一个函数调用自身(这貌似说了句废话),但这个过程又分为两个阶段----

  • 递:就是不断进入函数(自身)的过程,但所传的参数会不同,那么返回的就不同。
  • 归:就是回来的过程,说白了就是return;其中return的条件一定与参数有关。

递归使用情况

递归既然是方法的自我调用,而方法就是用来解决某一问题的,而方法的自我调用就可以理解成解决这个问题的一个子问题,而子问题的范围是由递归方法的参数来决定的。那么在这里我们可以做个总结,递归是用来解决子问题的。
那么我们根据父问题和子问题的关系可以求得父问题的答案:

  1. 父问题的答案由子问题的答案和其他组成(典型案例:汉诺塔,归并排序)
    这种情景的解决步骤应该是递归得出子问题答案—>组合子问题答案和其他答案—>得出最终答案。而递归的终止条件(递归边界),当你觉得子问题的答案足够简易求得,或问题本身已经被分得不存在了,无需继续分为更子问题,那么就可以终止递归了。
  2. 父问题的答案分为多个子问题答案和其他(典型案例:快速查找)
    这种情景的解决步骤应该是操作得出其他部分答案并分出子问题—>求出子问题答案。递归结束条件同上。

总结

那么我们可以发现,其实迭代就是把从小结果出发,一步步变成大结果的过程,而递归是从大问题本身出发,一步步将其递推到小问题,然后再通过小问题的答案来回去解决大问题。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值