这是我参与8月更文挑战的第6天,活动详情查看:8月更文挑战java
方法自身调用身就是递归。算法
可是,递归算法有个缺点, 就是很耗费栈内存,能够不用的时候尽可能别用。 此外, 递归必须有结束条件,不然会发生栈内存溢出错误;即便有告终束条件,也可能发生栈内存溢出错误,由于递归太深了。markdown
下面以Java语言为例来讲明递归的原理知识函数
在JVM内存划分上有三块主要的内存空间:post
当类加载的时候,方法(函数)代码片断存储在方法区中 代码片断虽然在方法区内存当中只有一份,可是能够被重复调用;每一次调用这个方法的时候,须要在栈内存中给该方法分配内存空间。spa
方法在调用的瞬间,会给该方法分配内存空间,会在栈中发生压栈动做;方法执行结束之后,给该方法分配的内存空间所有释放,此时发生弹栈动做。code
package practice;
public class pr1 {
public static void main(String[] args) {
int n=3;
int result = sum(n);
System.out.println(result);
}
public static int sum(int n) {
if(n==1) {
return 1;
}
return n*sum(n-1);
}
}
复制代码
代码执行时,首先运行main函数(程序入口),main函数进入栈内存,并存储变量;main调了sum,sum压栈,而后sum不断调用自身,直到n==1为止。 方法执行完后再逐个出栈。 orm