• 尾递归(java)


    一般递归: 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。

    尾递归:如果一个函数中所有递归形式的调用都出现在函数的末尾,我们称这个递归函数是尾递归的。当递归调用是整个函数体中最后执行的语句且它的返回值不属于表达式的一部分时,这个递归调用就是尾递归。尾递归函数的特点是在回归过程中不用做任何操作,这个特性很重要,因为大多数现代的编译器会利用这种特点自动生成优化的代码。

    例如:求阶乘,fun(5)=1*2*3*4*5

    java实现一般递归:

    public static int fun(int n){
            if(n == 1){
                return n;
            }else{
                return n * fun(n - 1);
            }
        }

    拆解过程:

    //        fun(5);
    //        5 * fun(4);
    //        5 * (4 * fun(3));
    //        5 * (4 * (3 * fun(2)));
    //        5 * (4 * (3 * (2 * fun(1))));
    //        5 * (4 * (3 * (2 * 1)));
    得到结果:120

    java实现尾递归:

    public static int fun(int n, int record){
            if(n == 1){
                return n;
            }else{
                return n * fun(n - 1, n + record);
            }
        }

    拆解过程:

    //        fun(5, 0);
    //        fun(4, 5);
    //        fun(3, 9);
    //        fun(2, 12);
    //        fun(1, 14);
    //        fun(0, 15);
    得到结果:120
  • 相关阅读:
    HDU5730 Shell Necklace
    BZOJ4883 [Lydsy2017年5月月赛]棋盘上的守卫
    Spring boot 配置文件
    org.joda.time.DateTime 日期操作
    Elasticsearch + Springboot 启动报错 java.net.ConnectException: Connection refused
    centos7 在docker下安装es Elasticsearch
    centos 7 。 docker 安装rabbitmq 以及集权搭建
    linux 安装mysql5.7.25
    安装rabbtimq CentOS 7
    docker + spring boot 打包 部署。
  • 原文地址:https://www.cnblogs.com/cat520/p/11810254.html
Copyright © 2020-2023  润新知