递归实验
一、简介
1.实现isPrime函数,参数为整数,要有异常处理。如果整数是质数,则返回True,否则返回False。
2.使用datetime库,对自己的生日输出不少于10种日期格式。
3.实现汉诺塔算法,要求三个柱子编号为A、B、C,算法能将N个盘子(从大到小编号为N到1)从柱A移动到柱C,并保持遵循下大上小的原则,算法执行过程中以如下格式按移动顺序输出每个盘子的每次移动过程:n盘从柱x移动到柱y。
二、基本要求
- 理解递归函数的定义:
- 递归终止条件
- 分治思想与递归
- 问题与子问题
- 掌握递归思维:
- 归纳法思想
- 归纳法证明与递归计算的关系
- 注意Datetime库的使用
- 格式化输入当前日期和时间
- 格林威治时间的输出
三、概要设计
实验1:通过if, else和for循环实现对质数的判断,注意参数形式,实现isPrime函数。
实验2:熟悉使用datatime库,采用strftime函数对自己的生日输出不少于10种日期格式。
实验3:实现汉诺塔算法,要求三个柱子编号为A、B、C,算法能将N个盘子(从大到小编号为N到1)从柱A移动到柱C,并保持遵循下大上小的原则,算法执行过程中以如下格式按移动顺序输出每个盘子的每次移动过程:n盘从柱x移动到柱y。
四、详细设计
实验1:
def isPrime(n):
if n <= 1:
return False
else:
for i in range(2, int(sqrt(n)) + 1):
if n % i == 0:
return False
return True
try:
num = int(input("请输入一个整数:"))
print(isPrime(num))
except ValueError:
print("输入格式错误。")
实验2:
import datetime
bir = datetime.datetime(2021,2,14)
print(bir.strftime("%Y-%m-%d"))
print(bir.strftime("%Y-%B-%d"))
print(bir.strftime("%Y-%b-%d"))
print(bir.strftime("%x"))
print(bir.strftime("%d-%m-%Y"))
print(bir.strftime("%d-%B-%Y"))
print(bir.strftime("%d-%b-%Y"))
print(bir.strftime("%b-%d-%Y"))
print(bir.strftime("%B-%d-%Y"))
print(bir.strftime("%m-%d-%Y"))
实验3:
c = 0
def han(n,src,dst,mid): # n为第几块圆盘
global c
if n == 1:
print("{}:{}->{}".format(1,src,dst)) # 第一块圆盘的移动
c += 1
else: # n与n-1的移动
han(n-1,src,mid,dst) #把n-1个圆盘移动到中柱子,而右柱子成为中转站
print("{}:{}->{}".format(n,src,dst)) # 再把第n个圆盘移动到右柱子
c += 1
han(n-1,mid,dst,src) # 再把左柱子作为中转站,把在中柱子的n-1个圆盘移动到右柱子
han(3,"A","C","B")
print("共需要{}步".format(c))
测试结果pycharm实现
实验1:
实验2:
实验3: