一个递归函数是指一个函数调用了它自己,将问题分解为更小的问题,知道分解为最基本的问题。
递归的指数计算函数
指数函数的迭代定义
def power(r,n):
value=1
for i in range(1,n+1):
value=r*value
return value
print(power(2,3))
指数函数的递归定义
def power(r,n):
if n==1:
return r
else:
return r*power(r,n-1)
print(power(2,3))
递归算法有两个特点:
1、具有一个或多个基本问题,其有朴素解
2、具有一个“归纳”的步骤,不断地将问题分解为更小的问题,知道最后分解到一个基本问题。这个归纳的步骤叫做分解。
问题的递归解用伪代码表示如下;
if 到达了基本问题
直接得到基本解
else
重复的分解问题,直到到达基本问题
递归的回文生成函数
回文单词
def isPalindrome(word):
word = word.lower()
if len(word)<=1:
return True
elif word[0] == word[-1]:
word = word[1:-1]
return isPalindrome(word)
else:
return False
print(isPalindrome("gig"))
递归的分形计算函数
分形图形
import turtle
def main():
t = turtle.Turtle()
t.hideturtle()
t.speed(10)
level = 12
fract(t,-80,60,80,60,level)
def fract(t,x1,y1,x2,y2,level):
newX = 0
newY = 0
if level==0:
drawLine(t,x1,y1,x2,y2)
else:
newX = (x1+x2)/2+(y2-y1)/2
newY = (y1+y2)/2-(x2-x1)/2
fract(t,x1,y1,newX,newY,level-1)
fract(t,newX,newY,x2,y2,level-1)
def drawLine(t,x1,y1,x2,y2):
t.up()
t.goto(x1,y1)
t.down()
t.goto(x2,y2)
main()
注释
1、递归解法中的基本问题被叫做终止情况或终止条件
2、任何可以由递归解决的问题都可以使用迭代解决。迭代的方法通常执行的更快,并且占用更少的内存。不过,递归解法的代码通常更短,并且更加易读。
3、如果一个递归算法的编写不正确,使得终止条件永远都不会到达的话,程序将可能会终止并输出“RuntimeError:maximun recursion depth exceeded”
4、当两个过程互相调用时也会产生递归,这种递归叫做间接递归。
counter=0
def main():
one()
def one():
global counter
counter+=1
if counter<5:
print("1",end="")
two()
def two():
print("2",end="")
one()
main()