【算法分析与设计·学习笔记·递归与分治策略】python实现阶乘函数、斐波那契(Fibonacci)、阿克曼(Ackerman)

直接或间接调用自身的算法称为递归函数

1.阶乘函数

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

2.斐波那契(fibonacci)

def fibonacci(n):
    if(n>1):
        return fibonacci(n-1)+fibonacci(n-2)
    else:
        return 1

3.阿克曼(Ackerman)

def Ackerman(n,m):
    if(n==1 and m==0):
        return 2
    elif(n==0 and m>=0):
        return 1
    elif(n>=2 and m==0):
        return n+2
    else:
        return Ackerman(Ackerman(n-1,m),m-1)  

意义:

(1)当m=0,返回n+1

(2)当m=1,若n=0,返回1;

                        若n=1,返回2;

                        若n>1,返回Ackerman(Ackerman(n-1,1),0)=Ackerman(n-1,1)+2,则原式为2n

(3)当m=2,若n=0,返回1;

                        若n>=1,返回Ackerman(Ackerman(n-1,2),1)=2Ackerman(n-1,2),则原式为2^{n};

(4)当m=3,若n=0,返回1;

                         若n>=1,返回Ackerman(Ackerman(n-1,m),m-1)  ,则原式为2^{2^{\cdots ^{2}}},其中一共有n层

(5)m=4增长速度过快,没有恰当式子来表达

猜你喜欢

转载自blog.csdn.net/m0_58365661/article/details/123829655
今日推荐