使用python 3 实现了一些递归算法
递归就是函数调用自身的过程
关键特性:1.链条—>计算过程中存在递归链条
2.基例—>存在一个或多个不需要再次递归的基例
递归构成:
函数 + 条件语句
#######函数+分支结构 链条+基例(函数的计算机运算过程)
def rvs(s):
if s == "":
return s
else:
return rvs(s[1:])+s[0] #将字符串反转
rvs("sldfkjsdlkfj")
############斐波那契数列########
def f(n):
if n==1 or n==2:
return 1
else:
return f(n-1)+f(n-2)
f(10)
##############
def countdown(n):
if n<=0:
print('Blastoff!')
else:
print(n)
countdown(n-1)
countdown(3)
#######################
def jiecheng(n):
if n==0:
return 1
else:
return n*jiecheng(n-1) #n的阶乘
jiecheng(5)
#########汉诺塔###########
count = 0
def hanoi(n,src,dst,mid):
"""
:param n: 汉诺塔个数
:param str: 源柱子
:param dst: 目的柱子
:param mid: 中间柱子
:return:0
"""
global count
if n == 1:
print("{}:{}-->{}".format(1,src,dst))
count += 1
else:
hanoi(n-1,src,mid,dst)
print("{}:{}-->{}".format(n,src,dst))
count += 1
hanoi(n-1,mid,dst,src)
hanoi(3,"A","C","B")
print(count)
#########科赫雪花
import turtle
def huabi():
turtle.speed(2)
turtle.pensize(1)
turtle.set.up(800,800)
turtle.penup()
turtle.goto(-300,100)
turtle.pendown()
# 定义尖
def koch(size,n):
if n == 0:
turtle.fd(size)
else:
for angle in range(0,60,-120,60):
turtle.left(angle)
koch(size/3,n-1)
# 定义边
def sdkoch(size,n):
koch(size,n)
turtle.right(120)
koch(size,n)
turtle.right(120)
koch(size,n)
turtle.hiderturtle()
turtle.done()
def main(size,n):
huabi()
sdkoch(size,n)
main(500,2)