动动手
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
代码实现