/*
关于方法的递归调用
1、递归:方法自身调用自身
2、递归很耗费栈内存,递归算法可以不用的时候尽量别用
3、递归必须有结束条件,
没有结束条件必定会发生栈内存溢出错误
(即使有结束条件也可以会)
*/
public class RecursionTest01
{
//主方法
public static void main(String[] args){
System.out.println("main begin");
//调用dosome方法
dosome();
}
//以下的代码片段虽然只有一份,
//但是可以被重复的调用,
//并且只要调用dosome方法就会在栈内存中分配一块所属的空间
public static void dosome("dosome begin"){
System.out.println("dosome begin");
dosome(); //这行代码不结束下一行程序不能执行
System.out.println("dosome over");
}
}
/*
不使用递归,计算1~n的和
*/
public class RecursionTest02
{
public static void main(String[] args){
/*
int sum = 0;
for(int n = 1;n<=10;n++){
sum += n;
}
System.out.println(sum);
*/
int n = 4;
int retValue = sum(n);
System.out.println(retValue);
}
//单独的定义一个方法,独立的可以完成计算1~n的求和
public static int sum(int n){
int result = 0;
for(int i=1;i<=n;i++){
result += i;
}
return result;
}
}
/*
使用递归计算1~n的求和
*/
public class RecursionTest03
{
public static void main(String[] args){
//1~4的和
int n = 4;
int retValue = sum(n);
System.out.println(retValue);
}
public static int sum(int n){
//4 + 3 + 2 + 1
if(n == 1){
return 1;
}
return n + sum(n-1);
}
}
public class RecursionTest04
{
public static void main(String[] args){
int n = 5;
int retValue = method(n);
System.out.println(retValue);
}
public static int method(int n){
int result = 1;
for(int i = n; i > 0; i--){
result *= i;
}
return result;
/*
递归方式:
if(n == 1){
return 1;
}
return n * method(n - 1);
*/
}
}