目录
1 递归
#拿阶乘举例:
# 1)“1的阶乘”是1
# 2)“n的阶乘”就是n乘以“n-1的阶乘”
def Factorial(n): #函数返回n的阶乘
if n<2:
return 1 #终止条件
else:
return n*Factorial(n-1)
#自己调用自己
print(Factorial(4))
#斐波那契数列(运算速度较慢)
def Fib(n):
if n==1 or n==2:
return 1
else:
return Fib(n-1)+Fib(n-2)
2 雪花曲线(科赫曲线)问题1
#雪花曲线(科赫曲线)问题:
# 1)长为size,方向为x(x是角度)的0阶雪花曲线,是方向x上一根长为size的线段
# 2)长为size,方向为x的n阶雪花曲线,由以下四个部分依次拼接组成:
# 1.长为size/3,方向为x的n-1阶雪花曲线
# 2.长为size/3,方向为x+60的n-1阶雪花曲线
# 1.长为size/3,方向为x-60的n-1阶雪花曲线
# 1.长为size/3,方向为x的n-1阶雪花曲线
import turtle #n是阶数,size是长度
def snow(n,size): #从当前起点出发,在当前方向画一个长度为size,阶为n的雪花曲线
if n==0:
turtle.fd(size) #笔沿着当前方向(forward)前进size
else:
for angle in [0,60,-120,60]: #对应列表中的每一个元素angle
turtle.left(angle) #笔左转angle度,turtle.lt(angle)也可
snow(n-1,size/3)
turtle.setup(800,600)
# 窗口缺省位于屏幕正中间,宽高800*600像素,窗口中央坐标(0,0)
# 初始笔的前进方向是0度。正东方是0度,正北方是90度
turtle.penup() #抬起笔
turtle.goto(-300,-50) #将笔移动到-300,-50位置
turtle.pendown() #放下笔
turtle.pensize(3) #笔的粗度是3
snow(4,600) #绘制长度为600,阶为4的雪花曲线,方向水平
turtle.done() #保持绘图窗口
3 雪花曲线(科赫曲线)问题2
import turtle
def snow(n,size):
if n==0:
turtle.fd(size)
else:
for angle in [0,60,-120,60]:
turtle.left(angle)
snow(n-1,size/3)
turtle.setup(800,800)
turtle.speed(1000)
turtle.penup()
turtle.goto(-200,100)
turtle.pendown()
turtle.pensize(2)
level=3
snow(level,400)
turtle.right(120) #右拐120度
snow(level,400)
turtle.right(120)
snow(level,400)
turtle.done()
4 上台阶与汉诺塔例题
#形式相同 规模变小
#上台阶问题:有n级台阶,每步可以走一级或两级,问有多少种不同走法
def ways(n):
if n==1:
return 1
elif n==2:
return 2
else:
return ways(n-1)+ways(n-2) #第一步走1级的走法+第一步走2级的走法
print(ways(4))
#汉诺塔问题:塔内有三个座A、B、C,A座上有64个盘子,盘子大小不等,大的在下,小的在上。
def Hanoi(n,src,mid,dest): #将src座上的n个盘子,以mid座为中转,移动到dest座
if (n==1): #只需移动一个盘子
print(src + "->" + dest) #直接将盘子从src移动到dest即可
return #递归终止
Hanoi(n-1,src,dest,mid) #先将n-1个盘子从src移动到mid,【以dest座为中转】
print(src + "->" + dest) #再将一个盘子从src移动到dest
Hanoi(n-1,mid,src,dest) #最后将n-1个盘子从mid移动到dest,【以src座为中转】
n=int(input())
Hanoi(n,'A','B','C')
5
输入n = 4:
A->B
A->C
B->C
A->B
C->A
C->B
A->B
A->C
B->C
B->A
C->A
B->C
A->B
A->C
B->C