目录
1.列表元素之和
递归由两部分组成,递归边界和递归式
def getsum(alist):
if len(alist)==1:
return alist[0]
else:
return alist[0]+getsum(alist[1:])
print(getsum([1,2,3,4]))
2.十进制数转任意进制
def tostr(num,base):
table="0123456789ABCDEF"
if num<base:
return table[num]
else:
return tostr(num//base,base)+table[num%base]
print(tostr(10,2))
3.使用栈来辅助递归
from pythonds.basic import Stack
s=Stack()
def get(num,base):
if(num<base):
s.push(num)
else:
s.push(num%base)
get(num//base,base)
get(10,2)
while not s.isEmpty():
print(s.pop(),end="")
4.画乌龟
from turtle import *
myturtle=Turtle()
mywin=myturtle.getscreen()
def draw(myturtle,linelen):
if linelen>0:
myturtle.forward(linelen)
myturtle.right(90)
draw(myturtle,linelen-5)
draw(myturtle,100)
mywin.exitonclick()
5.递归画树
def tree(branchnlen,t):
if branchnlen>5:
t.forward(branchnlen)
t.right(20)
tree(branchnlen-15,t)
t.left(20)
tree(branchnlen-10,t)
t.right(20)
t.backward(branchnlen)
from turtle import *
t=Turtle()
mywin=t.getscreen()
t.left(90)
t.up()
t.backward(300)
t.down()
t.color('green')
tree(110,t)
mywin.exitonclick()
6.汉诺塔
def movedisk(f,t):
print("move disk from {} to {}".format(f,t))
def hanuota(height,start,route,end):
if(height==0):
return
else:
hanuota(height-1,start,end,route)
movedisk(start,end)
hanuota(height-1,route,start,end)
hanuota(2,"A","B","C")