递归与回溯算法详解

一、递归
1 递归的定义
所谓递归就是一个函数或过程可以直接或间接的调用自己。我们大家都熟悉一个民间故事:从前有一座山,山上有一座庙,庙里有一个老和尚正在给小和尚讲故事,故事里说,从前有一座山,山上有一座庙 ,庙里有一个老和尚正在给小和尚讲故事,故事里说…。像这种形式,我们就可以称之为递归的一种形象描述,老和尚什么时候不向下讲了,故事才会往回返,最终才会结束。
再如:前面多次提到的求n阶乘的问题,因此,求n阶乘的问题转化成了求n*(n-1)!的问题,而求n-1阶乘的问题又与求n阶乘的方法相同,只不过是求阶乘的对象的值减去了1,当n的值递减到0时,n!=1,从而结束以上过程,求得n阶乘的解。
也就是说,求解n阶乘的过程可以用以下递归方式来表示:
在这里插入图片描述
在这里,为了定义n!,就必须先定义(n-1)!,为了定义(n-1)!,又必须先定义(n-2)!。。。。。。,上述这种用自身的简单情况来定义自己的方式成为递归定义。
一个递归定义必须是有确切含义的,也就是说,必须一步比一步简单,最后是有终结的,决不允许无限循环下去。上面的例子中,当N=0时定义一个数1,是最简单的情况,称为递归的边界,它本身不在使用递归定义。每一递归都有其边界条件,递归的边界条件是从自身出发达到边界条件。
2 递归的调用
在程序中,子程序可以直接自己调用自己或间接调用自己,则将这种调用形式称之为递归调用。
递归调用时必须符合以下三个条件:
(1)可将一个问题转化为一个新的问题,而新问题的解决方法仍与原问题的解决方法相同,只不过所处理的对象有所不同而已,即他们只是有规律的而递减或递增。
(2)可以通过转化过程使问题回到对原问题的求解。
(3)必须要有一个明确的结束递归的条件,否则递归会无止境的进行下去。
3 回溯算法
回溯法是搜索算法中的一种控制策略,它是从初始状态出发,运用题目给出的条件、规则,按照深度优先搜索的顺序扩展所有可能情况,从中找出满足题意要求的解答。即:
从问题的某一种可能出发,搜索从这种情况出发所能达到的所有可能,如果有路可以走下去,就走到下一个状态,继续按照这种规则搜索;当这条路走到“尽头”而没有达到目标状态的时候,在倒回上一个出发点,从另一个可能出发,继续搜索,直到达到目标状态。
例如:迷宫求解
从迷宫的入口进去后是如何找到出口的?
如果你不了解迷宫结构显然只能是摸索着前进,比如先往一个方向走,若走不通就只能退回来在试试另个一个方向,但在走的过程中你一定会有意识的“记住”你已经走过的路,否则你会被困在迷宫中永远也走不出来了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值