小甲鱼python2课后_小甲鱼Python第二十二讲课后习题

本文介绍了递归编程在解决斐波那契数列、兔子问题和汉诺塔问题中的应用。通过递归函数实现十进制转二进制、数字分解、判断回文字符串,并探讨了汉诺塔问题的递归解决方案。同时,提供了输入层数求解汉诺塔的完整代码。递归是解决问题的有效工具,尤其在处理具有重复子问题的复杂问题时显得尤为重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

def fab(n):

n1 =1

n2 =1

n3 =1

if n < 1:

return -1

if n ==1:

return 1

if n == 2:

return 1

while (n-2)>=0: #这里总写for循环

n3 = n1 +n2   #n1 和 n2的顺序总写反

n1 = n2

n2 = n3

n -=1

return n3

result =fab(20)

if result != -1:

print('总共有小兔子%d 只'%result)

递归的方式:

自己写的

def aaa(n):

if n <0:

return -1

if n ==1 or n ==2:

return 1

else:

return aaa(n-1)+aaa(n-2)

result =aaa(20)

if result!=-1:

print('总共%d只兔子'%result)

用递归的方式解决汉诺塔问题:

def hannoi(n,x,y,z):

if n == 1:

print(x,'-->',z)

else:

hannoi(n-1,x,z,y)#将前n-1个盘子移动到y上

print(x,'-->',z)#将最底下的盘子移动到z上

hannoi(n-1,y,x,z)#将y上的n-1个盘子移动到z上

n = int(input('请输入汉诺塔的层数:'))

hannoi(n,'X','Y','Z')

动动手:

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

def Bin(n):

temp = ''

if n:

temp = Bin(n//2)

temp += str(n%2)

return temp

else:

return temp

num = int(input('请输入一个十进制数:'))

print(num,'-->',Bin(num))

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

[1, 2, 3, 4, 5]

解题思路:利用除以10取余数的方式,每次调用get_digits(n//10),并将余数存放到列表中即可。要注意的是结束条件

设置正确。

def get_digits(n):

result = ''

if n:

result = get_digits(n//10)

result += str(n%10)

return list(result)

num = int(input('请输入一个数:'))

print(get_digits(num))

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

解题思路:有好多种方法,不过综合效率来说,小甲鱼的实现方式比较朴素,利用递归每次索引前后两个字符进行对

比,当start > end的时候,也正是首尾下标“碰面”的时候,即作为结束递归的条件。

def Huiwen(temp,start,end):

if start > end:

return 1

else:

if temp[start]==temp[end]:

return Huiwen(temp,start+1,end-1)

else:

0

temp = input('请输入一段文字:')

length = len(temp)

end = len(temp)-1

if Huiwen(temp,0,end):

if temp[0:length//2] == temp[length//2:length]:

print('%s不是一个回文字符串!'%temp)

else:

print('%s是一个回文字符串!'%temp)

else:

print('%s不是一个回文字符串!'%temp)

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

SouthEast

def Age(n):

if n == 1:

return 10

if n > 1:

age = 10

age = Age(n-1) + 2

return age

num = int(input('请输入要查询的编号:'))

print('第%d个人的年龄是:%d'%(num,Age(num)))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值