不懂递归?没关系,这篇老板与秘书的对话让你秒懂!!!

职场   2024-09-25 11:27   福建  
递归是编程学习中一个不可避免的关键概念,很多新手在刚开始接触时,经常一头雾水。

那么,递归究竟是什么意思?

递归是一种在函数中调用自身的方法。

通常递归会把一个复杂的问题分解成较小的子问题,直到达到一个基准情况(即不再调用自身,直接返回结果)。

递归函数通常有两个主要部分:

  • 基准条件:当满足某个条件时,递归停止,函数不再调用自身。

  • 递归调用:函数在解决问题的过程中调用自己,但问题的规模逐渐缩小。

递归的一个经典例子是计算阶乘,阶乘函数定义为:

def factorial(n):    if n == 1:  # 基准条件:当 n 为 1 时返回 1        return 1    else:        return n * factorial(n - 1)  # 递归调用

比如调用 factorial(5),过程如下:

factorial(5) -> 5 * factorial(4)factorial(4) -> 4 * factorial(3)factorial(3) -> 3 * factorial(2)factorial(2) -> 2 * factorial(1)factorial(1) -> 1

最终得到结果 5 * 4 * 3 * 2 * 1 = 120


接下来我们换个生活的例子来理解递归:

老板打电话给秘书:
"准备好周末!我们要出差两天。"

秘书立刻给老公打电话:
"亲爱的,我和老板要出差,你这两天得自力更生了哈。"

老公露出狡黠的笑容,拨通了女友的电话:
"宝贝,我老婆出差了,来我家吧,咱俩乐呵乐呵!"

女友眼睛一亮,赶紧通知辅导功课的男孩:
"这周末你自由了,功课取消啦!"

男孩高兴的跳了起来,马上给爸爸打电话:
"爸,这个周末终于能跟你一起了!"

老板听到儿子的话,瞬间心软,拿起电话给秘书说:
"出差取消了,我要陪我儿子过周末。"

秘书一边叹气,一边给老公打电话:
"不去了,周末在家。"

老公急得不行,赶紧给女友发消息:
"不好意思啊,老婆不出差了,计划取消!"

女友无奈地打给男孩:
"抱歉了,功课继续,赶紧准备学费吧。"

男孩一脸苦相,打给爸爸:
"对不起爸,我还是得上课..."

老板长叹一声,默默拿起手机又给秘书打了个电话:
"唉,准备出差吧..."

用 python 来实现以上的故事:

# 递归式的电话传递故事实现
def phone_story(state): characters = [ "老板打电话给秘书说:“准备过周末吧,我们要出差了。”", "秘书打电话给丈夫说:“我和老板要出差两天,你要照顾好自己。”", "丈夫打电话给女友说:“我老婆出差了,回家吧,我们可以玩得开心。”", "女友给自己辅导功课的男孩打电话:“这个周末不用辅导功课了。”", "男孩打电话给父亲说:“爸爸,我们终于可以一起度过这个周末了。”", "爸爸(老板)打电话给秘书说:“出差取消了。我要和我儿子一起过周末。”", "秘书打电话给丈夫:“我不去了。”", "丈夫打电话给女友:“对不起,我的妻子不去了。”", "女朋友打电话给男孩:“你要交学费了。”", "男孩打电话给他的父亲并说:“对不起爸爸,我要上课了。”" ] print(len(characters)) print(state) if state == len(characters): print("爸爸打电话给他的秘书,故事循环回到起点...\n") return # 逐层推进 print(characters[state]) # 递归调用,模拟每个人逐步传递电话 phone_story(state + 1) # 回溯时,角色开始改变决定 print(characters[len(characters) - state - 1])

# 从故事的第一个电话开始phone_story(0)

下图也诠释了递归的真正内涵:


菜鸟教程
学的不仅是技术,更是梦想!
 最新文章