谷歌面试问题50%需要用递归:理解递归算法的本质这篇够不够?

Mr.zhuMr.zhu2025-05-25 17:43:47来源:优站库 (www.uzkoo.com)阅读:18

你对递归很纠结吗?

虽然代码量少,理解起来太费劲?如果你这么想那就对了。

因为我们人类的思维方式和递归的实现逻辑是有冲突的!我们想问题根本不那么想。

可是程序员面试不得不准备算法题,尤其是竞争激烈的公司,不管你进去拧不拧螺丝钉。

 

算法题中超过50%的问题直接或间接的与递归相关。

重要事情说三遍,因为这很重要

 

今天我们就掰开它看看,到底有多难。

玩过俄罗斯套娃么?一层一层的套,里面有更小的娃娃。

如果中间某个娃娃里面放了一枚钻戒,让你去找出来—这就是嵌套问题的一种。

 

俄罗斯套娃

听过马三立的《祖传秘方》单口相声么?治疗浑身发痒的神器-纸条包纸条(答案是:挠挠)

实际上,答案不一定在最后一张纸条里面,哪张都可能,哈哈。没看过的自己补一下。

单口相声-祖传秘方

开心完了看看理解递归的的关键是啥:

例子说话:

就走一遍啥也没干是啥样?

嵌套Stack

执行结果看下面:全都入栈,再从孩子的孩子最底层执行出来。

in stack for recurser_print(5) output not trigger yet

in stack for recurser_print(4) output not trigger yet

in stack for recurser_print(3) output not trigger yet

in stack for recurser_print(2) output not trigger yet

in stack for recurser_print(1) output not trigger yet

exit and print n for recurser_print(1)

exit and print n for recurser_print(2)

exit and print n for recurser_print(3)

exit and print n for recurser_print(4)

exit and print n for recurser_print(5)

还是没太明白?加个图:只有一个门,后进先出来。计算机得记得它先后要干活的具体顺序。

嵌套算法

基本执行看明白了,一个基本例子理解一下:

特点:

求n的阶乘

运行结果:

In stack:3

In stack:2

out stack:2 -人工添加

out stack:3 - 人工添加

6

总结:

嵌套算法的特点:

• 每次有不同的输入

• 但是每次运算相同

• 必须有停止嵌套的条件(防止死循环)

• 与循环的不同:每次输入数据范围缩小

为什么要用嵌套算法:

• 能用嵌套不用循环:好写 好读,-- 这条可以有异议

• 问题可以分解为相同的小问题(处理的数据范围变小)

• 广泛应用于 树, 图 数据结构中

• 比如: 树的深度优先搜索,如果你发现一个问题可以通过搜索来解决,那么你就有一个很好的递归算法候选。

 

猜你想看

一到春天就长湿疹?请收好这份预防清单
洗车时,3个部位不要直接用水冲,伤车事小,毁车事大
自吸与涡轮增压怎么选?谁更适合跑高速?老车主:上高速就明白了
保姆级画眉教程来啦
手持房产证,还有必要去办不动产证吗?这点很重要,购房者该了解
国人不爱看好莱坞了!国产电影包揽年度票房前十 榜单一览你看过几部
女人有多“干净”?看她是否经常去这里,答案一清二楚
老板为何宁愿花 12K 重新招人,也不愿意花 9K 留住老员工?
都说带T好!1.5T,1.0T,到底等于多大排量自吸发动机?
这6种“光瓶白酒”,价格不到50元,却是老酒鬼认准的纯粮白酒
全身是宝的菠萝蜜
吞下去的口香糖会粘住肠子?有一种情况真的很危险
你还在单一使用社保卡吗?社保卡的N种功能,给大家罗列好了
“正部级央企”全国仅3家,门槛有多高?我国副部级又有多少家?
瑞士梅花表和浪琴表选哪个,梅花表适合什么人佩戴?手表品牌
无添加自制酸梅汤,清凉解暑,酸甜可口,夏天必备的饮品“爽”
让你变得更聪明的五个行为,激活你的大脑,提升认知能力
什么是网站seo索引优化?该如何去做?
医疗科技的六位“最强大脑”,带你看清技术与商业未来 | CCF-GAIR 2020
电动车电池不行了,是换锂电好,还是铅酸电池好?老师傅提建议

推荐站点