第023、024讲:递归:这帮小兔崽子、汉诺塔
第023、024讲:递归:这帮小兔崽子、汉诺塔
动动手
0. 使用递归编写一个十进制转换为二进制的函数(要求采用“取2取余”的方式,结果与调用bin()一样返回字符串形式)。
def decbin(n):
string = ''
if n:
string = decbin(n//2)
return string + str(n%2)
else:
return string
print(decbin(9))
'1001'
# 这里递归就是 string = decbin(n//2) 调用自身的行为,按照顺序全部写入内存,直到 n = 0 即 False 时,再将内存中写入的数据的值反向输出,即 最后输入的第一个输出
1. 写一个函数get_digits(n),将参数n分解出每个位的数字并按顺序存放到列表中。举例:get_digits(12345) ==> [1, 2, 3, 4, 5]
list1 = []
def get_digits(n):
if n:
list1.insert(0,n%10)
get_digits(n//10)
return list1
print(get_digits(144))
[1,4,4]
# 除以10取余数并插入列表的第0位,除以10的整数部分作为递归下一次的调用值
2. 还记得求回文字符串那道题吗?现在让你使用递归的方式来求解,亲还能骄傲的说我可以吗?
def string(n,start,end):
if start > end:
return 1
else:
return string(n,start+1,end-1) if n[start] == n[end] else 0
n = input('请输入字符串:')
length = len(n)-1
if string(n,0,length):
print('%s 是回文数' % n)
else:
print('%s 不是回文数' % n)
3. 使用递归编程求解以下问题:
- 有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
def age(n):
if n == 1:
return 10 # 定义初始值10
esle:
return age(n-1) + 2 # 每1个人+2岁
print(age(5))
18
递归头大
Python语言学习菜鸟 老家四川南充,来玩留言,嘻嘻
话说觉得这个主题难受的请下面评论