FIsh论坛《零基础入门学习Python》|第023、024讲:递归:这帮小兔崽子、汉诺塔 | 课后测试题及答案
动动手
- 使用递归编写一个十进制转换为二进制的函数(要求采用“取2取余”的方式,结果与调用bin()一样返回字符串形式)。
def Bin(x):
if x==0:
return '0'
elif x==1:
return '1'
else:
return Bin(x//2)+str(x%2)
print(Bin(5))
输出结果:
101
1.写一个函数get_digits(n),将参数n分解出每个位的数字并按顺序存放到列表中。
def fun(x):
if x//10==0:
return [x]
else:
return fun(x//10)+[x%10]
print(fun(1995))
输出结果:
[1, 9, 9, 5]
- 还记得求回文字符串那道题吗?现在让你使用递归的方式来求解,亲还能骄傲的说我可以吗?
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
print(fun("上海自来水来自海上"))
print(fun("上海海上"))
输出结果:
1
1
小问题:
str = 'abcdefg'
print(str[1:])
print(len(str))
print(len(str)-1)
print(str[1:len(str)])
#print(str[len(str)])错误
print(str[len(str)-1])
print(str[1:(len(str)-1)])
print(str[6])
print(str[1:6])#包括起始位置不包括结束位置
输出结果:
bcdefg
7
6
bcdefg
g
bcdef
g
bcdef
- 使用递归编程求解以下问题:
有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
def age(n):
if n == 1:
return 10
else:
return age(n-1) + 2
print(age(5))
输出结果:
18
- 请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式!
递归,print(str[1:6])#包括起始位置不包括结束位置