递归算法的特点:

1,自己调用自己(直接递归)或者通过其他函数调用自己(间接递归)

2,在使用递归时,必须有一个明确的递归结束条件

3,递归算法可以简化问题,但是运行效率低,一般不提倡使用递归

 

用递归解决问题:

阶乘

斐波那契数列

二项式

斐波那契0、1、1、2、3、5、8、13、21

递归:

 

def f (n):
    if n==1:
        return 0
    if n==2:
        return 1
    else:
        return f (n-1)+f (n-2)
for i in range(10):
    print(f (i+1))    #因为i是从0开始的

提示:i到30以后计算时间会变得非常慢

还有一种方法是迭代:

count/step

num1

num2

num3

1

1

1

 

 

 

1

2

2

2

1

 

 

 

2

3

3

3

2

 

 

 

3

5

4

5

3

 

 

def fabonacci_2(n):
    num1=0
    num2=1
    count=1
    if n==1:
        return 0
    elif n==2:
        return 1
    while count<n:
        num3=num2+num1
        num2=num1
        num1=num3
        count+=1
    return num1
for i in range(10):
    print(fabonacci_2(i+1))

 

阶乘

1*2*3*4*...=...

递归:

def f(n):
    if n==1:
        return 1
    else:
        return f(n-1)*n

 

迭代:

def factory(n):
    count=1
    result=1
    facEval="1"
    while count<n:
        result*=count
        count+=1
        facEval+="*%s"%count
    result*=count
    print("%s=%s"%(facEval,result))   #打印出公式
    return result

现在有一个Ackerman函数a(m,n)

要求用递归和迭代求

 

#这种题目递归最容易实现的,照抄就行
def A(m,n):
    if m==0:
        return n+1
    elif n==0:
        return A(m-1,1)
    else:
        return A(m-1,A(m,n-1))
print(A(2,3))
View Code

 

这种题目我以前不知道该怎么做,今天网上偶尔查到了数学归纳法这种好东西,帮我把问题解决了

posted on 2016-08-05 18:59  euewrqe  阅读(231)  评论(0编辑  收藏  举报