递归调用

Posted zhichun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归调用相关的知识,希望对你有一定的参考价值。

递归调用

今天来学习算法中的递归调用,递归简单的说是自己调用自己。用生活中翻箱子的例子做比喻:
就是,
(1)创建一个要找的盒子堆

(2)从盒子堆中取出一个盒子

(3)如果,找到的是盒子,则继续找(调用函数)

(4)如果找到钥匙,则成功

技术图片

在递归案例中,最重要的是基线条件和递归条件。递归条件是指函数自己调用自己,但是总要有停下来的时候,这个停下来的条件就是基线条件,在某种情况下,自己不再调用自己,从而避免形成无限循环。

技术图片

递归函数中有两个特别有名的案例,一个是斐波那契数列,一个是递归求数组和。

首先斐波那契数列的代码是:

public static int fab(int i)
{
    if(i==0||i==1)
    {
        return 0;
    }
    else
    {   
        return fab(i-1)+fab(i-2);
    }
}

斐波那契数列中,

  • 递归条件是, i的值不等于0或1;

  • 基线条件是, i的值等于0或1,结束;

另外一个是递归数组求和

import java.util.Arrays;

public class Retirement {
    public static  void main(String[] args)
    {
        int[] array = {3,1,2,5,6,12};


        System.out.println(Sum(array));

    }

    public static int Sum(int[] array)
    {

        if(array.length<=1)
        {
           return array[0];
        }
        else
        {

            int newArray[];

            newArray  = Arrays.copyOfRange(array,1,array.length);

            return array[0]+Sum(newArray);

        }
    }

}

在递归数组求和中,递归条件是array.length的长度大于1,只有这样数组才会继续循环;
而当array.length小于或等于1,这样才能在满足条件时终止循环。

以上是关于递归调用的主要内容,如果未能解决你的问题,请参考以下文章

我在 laravel 中的递归函数不调用自己

vue递归组件的一些理解

java基础3-重载+命令行传参+递归+数组+排序

返回函数调用与仅在递归期间再次调用函数有啥区别?

JavaScript - 代码片段,Snippets,Gist

Python函数