• 递归简单题2


    在数学上有一个著名的“阿克曼(Ackermann)函数”,它是二元函数,其定义式为:ACK(M,N),M≥0,N≥0,且:

        (1)ACK(M,0)=ACK(M-1,0) (M>0)

        (2)ACK(M,N)=ACK(M-1,ACK(M,N-1))(M>0,N>0)

    初始条件:ACK(0,N)=1+N  (N≥0)

    请用递归方法求解ACK(M,N)。注意阿克曼函数递归调用次数增长是非常快的,比如要求ACK(3,7),需要经过将近70万次(693964次)递归调用。所以本题采用递归方法求解只能求解M和N很小的值。

    代码:

    #include<stdio.h>
    int ACK(int m,int n)
    {
        if(m==0&&n>=0)
          return 1+n;
        else if(n==0&&m>0)
          return ACK(m-1,0);
        else if(m>0&&n>0)
          return ACK(m-1,ACK(m,n-1));
        }
    int main()
    {
        int m,n;
        scanf("%d%d",&m,&n);
        printf("%d\n",ACK(m,n));
        getchar();
        getchar();
    }
        

  • 相关阅读:
    python入门-数据类型
    jmeter进行简单性能测试
    Charles抓包工具
    jemter分布式部署及linux下分布式脚本执行
    Java-List
    重载
    static关键字
    pycharm问题
    charles安装使用及问题
    安装pipenv
  • 原文地址:https://www.cnblogs.com/laobanban/p/2944697.html
Copyright © 2020-2023  润新知