第023、024讲:递归:这帮小兔崽子、汉诺塔

动动手

0. 使用递归编写一个十进制转换为二进制的函数(要求采用“取2取余”的方式,结果与调用bin()一样返回字符串形式)。

def Bin(x):
	if x==0:
		return '0'
	elif x==1:
		return '1'
	else:
		return Bin(x//2)+str(x%2)

1. 写一个函数get_digits(n),将参数n分解出每个位的数字并按顺序存放到列表中。

def fun(x):
	if x//10==0:
		return [x]
	else:
		return fun(x//10)+[x%10]

2. 还记得求回文字符串那道题吗?现在让你使用递归的方式来求解,亲还能骄傲的说我可以吗?

def fun(str1):
	if len(str1)==1:
		return 1
	elif len(str1)==2:
		if str1[1]==str1[0]:
			return 1
		else:
			return 0
	else:
		if str1[0]==str1[len(str1)-1] and fun(str1[1:len(str1)-1])==1:
			return 1
		else:
			return 0

3. 使用递归编程求解以下问题:

有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

def age(n):
    if n == 1:
        return 10
    else:
        return age(n-1) + 2

4. 请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式!

递归实现汉诺塔
在这里插入图片描述
对于游戏的玩法,我们可以简单分解为三个步骤:

将前63个盘子从a移到b上

将最底下的第64个盘子从a移到c

将b上的63个盘子移到c

问题1:将a上的63个盘子借助c移到b

问题2:将b上的63个盘子借助a移到c

然后:

问题1拆解为:

  • 将前62个盘子从a移到c上
  • 将最底下的第63个盘子从a移到b
  • 将c上的62个盘子移到b

问题2拆解为:

  • 将前62个盘子从b移到a上
  • 将最底下的第63个盘子从b移到c
  • 将a上的62个盘子移到b

代码实现
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值