acm第十二次深入了解递归和初识搜索

一、深入了解递归
我在看例题时,每当看到一个递归实现, 总是难免陷入不停的验证之中,比如阶乘,求解Factorial(n)时,我总会情不自禁的发问,Factorial(n-1)可以求出正确的答案么?接着就会再用Factorial(n-2)去验证,,,不停地往下验证直到Factorial(0)。感觉很傻…
但是我对递归的思路有点不适应,感觉和我们平时习惯的思维方式相反。我们习惯的思维是:已知Factorial(0),乘上 1 就等于Factorial(1),再乘以 2 就等于Factorial(2),,,直到乘到 n。而递归是从大到小推,然后再返回,总觉得自己没有算出数来,就没有安全感。还要继续努力
看看写递归的三个方法
1). 明确递归终止条件
我们知道,递归就是有去有回,既然这样,那么必然应该有一个明确的临界点,程序一旦到达了这个临界点,就不用继续往下递去而是回来。
2). 给出递归终止时的处理办法
我们应该直接给出问题的解决方案。即初始化。
3). 提取重复的逻辑,缩小问题规模
我们在阐述递归思想内涵时谈到,递归问题必须可以分解为若干个规模较小、与原问题形式相同的子问题,这些子问题可以用相同的解题思路来解决。从程序实现的角度而言,我们需要抽象出一个干净利落的重复的逻辑,以便使用相同的方式解决子问题。

二、搜索
1、广度优先搜索(BFS)
一层一层的搜索,检查这一层的所有数据,看看有没有我们的目标,如果没有,就继续下一层,直到目标出现
2、深度优先搜索(DFS)
一个路径一个路径的搜索,先搜索一个路径,如果没有目标,返回这个路径最低层的上一层,换个路径,继续搜索,如果这一层的路径都搜索完了,还没有,则在返回上一层,换个路径…
总而言之,深度搜索是一个路径一个路径搜索,不到黄河心不死!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值