方法的递归调用就是在一个方法中调用它本身
所以说如果我们没有结束语句的话,方法就永远不会停止
以上的程序没有设置结束语句,a函数一直重复调用本身,永远不会停止,直到栈内存用完
比如说我们要计算1到n的累加
如果不使用递归调用
//不使用递归方法实现从1开始的累加操作
//从1累加到n n的值由键盘输入
public class RecursionTest5{
public static void main(String[] args){
System.out.println("请输入需要累加的数字");
int x = shuRu(); //调用输入函数,得到输入的值
int result = leiJia(x); //调用累加函数,将输入函数得到的值传进去
System.out.println("累加结果为"+result);
}
public static int shuRu(){ //键盘输入函数的定义
java.util.Scanner s = new java.util.Scanner(System.in);
int a = s.nextInt();
return a; //将输入值a返回
}
public static int leiJia(int y){ //累加函数的定义
int sum = 0; //sum为累加的结果
for(int i =1; i<=y;i++){
sum=sum+i;
}
return sum; //将累加的结果返回
}
}
实际的执行结果如下
如果我们使用方法的递归调用
//使用方法递归来计算1-n的累加,其中n由键盘输入
public class RecursionTest6{
public static void main(String[] args){
int y = shuRu();
int result= leiJia(y);
System.out.println(result);
}
public static int shuRu(){ //定义输入函数
java.util.Scanner s = new java.util.Scanner(System.in);
int a = s.nextInt();
return a;
}
public static int leiJia(int i){ //定义累加函数
int sum = 0 ;
if(i==1){
return 1;
}
sum = i + leiJia(i-1); //递归leiJia函数
return sum;
}
}
执行的结果: