【算法分析与设计·学习笔记·递归与分治策略】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增长速度过快,没有恰当式子来表达

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慈善区一姐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值