递归与栈
栈是一种数据结构,进栈的数据遵循一个规则:先进后出。
所有的函数调用都会进栈。
递归指的是调用自己的函数。最经典的例子就是阶乘计算。
每个递归函数都有两个条件:基线条件和递归条件。
我们在调用递归时,每一次 的递归调用都会进入栈,最上层的函数调用只能访问自己的变量,不能访问其它调用变量。每一次的调用都会占据一定的内存来存储变量,如果递归没有终止的话,就会把内存占满,从而死机。因此,我们希望递归有一个终止,这个终止称为基线条件。
递归的本质就是分而治之,把一个规模较大的问题分解成若干个问题较小的问题,然后逐个解决。
基线条件就是分解出来的最小粒度的问题,问题分解到这一步就不再细分,也可以看作是终止条件。
递归条件是满足继续缩小问题规模的条件,使其符合基线条件。
编写涉及数组的递归函数时,基线条件通常是数组为空或者只包含一个元素。。
public class demo {
public static void main(String[] args) {
int[] arr= {0,1,2,3,4};
System.out.println(digui(arr,arr.length-1));
}
//求一个数组的所有元素之和,这个问题其实可以看成求元素的前n项之和,这样函数的适用范围更广
//基线条件就是数组的元素为0个
//递归条件为数组及其剩余的元素个数
//递归时最好不要新建变量
private static int digui(int[] arr,int n){
if(n==0){
return 0;
}else{
return arr[n]+digui(arr,n-1);
}
}
}

浙公网安备 33010602011771号