public class Study05 {
public static void main(String[] args) {
/**
* 递归:方法调用自身
*
* /*
* *1.什么是递归?
* * 就是方法自身调用自身。
* *
* *2.f(int n);
* *
* *f(int n){
* * f(n-1);//直接调用;
* *}
* *
* *f(int n){
* * a(n);//间接调用;
* *}
* *
* *a(int n){
* * f(n-1);
* *}
* *
* *3.计算5!
* *5!=5*4!
* *4!=4*3!
* *3!=3*2!
* *2!=2*1!
* *1!=1;
* *
* *public static int factorial(int n){
* *
* * int result=n*factorial(n-1);
* *
* * return result;
* *}
* *
* *4.递归的两个要素:
* * 1)方法调用自身的规则;
* * 2)递归的结束条件;如果没有结束条件,会出现栈溢出,java.lang.StackOverflowError。
* *5.递归的优缺点:
* * 1)思路简单;
* * 2)每调用一次方法,就开辟一次栈内存;内存消耗大,影响性能;如果对性能要求高,就避免使用递归。
* *6.递归的特点:
* * 1)一个问题可以分解成若干层相同的子问题;
* * 2)外层问题的解决依赖于内层问题的解决;
* * 3)每层问题的解决方法时一致的;
* * 4)要有结束条件。
* * 5)递归的问题都能用循环解决。
*/
System.out.println(sum(4));
}
//使用递归的方法求阶乘
public static int sum(int a) {
int temp = 0;
if (a == 1) {
temp = 1;//结束条件
} else {
temp = a * sum(a - 1);
}
return temp;
}
}