码迷,mamicode.com
首页 > 编程语言 > 详细

递归算法

时间:2016-08-05 19:35:07      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:

递归算法的特点:

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

 

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

递归算法

标签:

原文地址:http://www.cnblogs.com/euewrqe/p/5742534.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!