数据结构(邓俊辉):递归和迭代、分而治之和减而治之(1.概念)

两个重要概念:分而治之减而治之

1.减而治之:
为求解一个大规模的问题,将其分解为两个子问题:其中一个为平凡的子问题,另一个为规模缩减的子问题。分别求解子问题,由于子问题的求解,得到原问题的解。
减而治之示意图
2.分为治之
为求解一个大规模的问题,将其分解为两个若干(一般为两个)子问题,这些子问题的规模大体相当。分别求解子问题,由于子问题的求解,最后得到原问题的解。
分而治之
3.递归
什么叫做递归?
我的理解就是,递归就是,我不需要知道这个问题的解,我只需要知道这个问题分解成的新的问题的解,然后再反推回来原问题,而且,新的问题是从原来的问题里面分解出来的,所以它具有和元的的问题一样的特性,但是,它的规模变小了或者我可以直接简单地求出来(要知道,计算机只能计算”简单”的问题,这个问题可以繁琐,但是必须”简单”)。既然新问题和原问题具有相同的特性,把这个特性用相同的公式或者程序(函数)表达出来,那么我求解原问题的时候,直接调用这个函数,也就是在求解新问题,逐层调用,直到找到可以直接求解的那个新问题,这样,新问题全部解决了,也就意味着原问题也可以随之解决。

下面是百度百科对于递归的注释:

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

4.迭代
什么是迭代呢?
我的理解是,迭代是和递归相反的过程,迭代是从规模最小最简单的问题q开始,得到他的解。已知这个解,再去求解下一个和这个问题相关的新的问题,这个新问题具有的特性是它的特征和问题q是一样的,由于它的一部分解已知了(即问题q的解),剩下的就是和问题q一样的解法。这样逐层向上求解,最终得到大规模原问题的解。

下面是百度百科对于迭代的注释:

迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,
而每一次迭代得到的结果会作为下一次迭代的初始值。
重复执行一系列运算步骤,从前面的量依次求出后面的量的过程。此过程的每一次结果,都是由对前一次所得
结果施行相同的运算步骤得到的。例如利用迭代法*求某一数学问题的解。
对计算机特定程序中需要反复执行的子程序*(一组指令),进行一次重复,即重复执行程序中的循环,直到满足
某条件为止,亦称为迭代。

我们可以这样理解:
减而治之和分而治之是解决规模较大问题的指导方法,递归和迭代是程序执行的具体方法。
具体分析一个问题时,可以先讨论用减而治之还是分而治之的方法,再然后针对具体的程序,再考虑采用迭代还是递归的具体方法。

如何分析递归和迭代的算法的复杂性:

  1. 递归跟踪
  2. 递推方程

ps.(留个尾巴以后再来补充)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值