递归调用
什么是递归?
递归函数就是在一个方法内直接或者间接调用函数本身的函数。
例如:计算1-100的和; 不使用递归可以这样写:
public static void main(String args[]){
int n=100;
int output = sum(n);
System.out.println(output);
}
public static int sum(int n){
int temp=0;
for(int i=n;i>0;i--){
temp+=i;
}
return temp;
}/* Output:
5050
*/
而在使用递归函数的情况下可以这样写:
```java
public static void main(String args[]){
int n=100;
int output = sum(n);
System.out.println(output);
}
public static int sum(int n){
if(n==1)
return 1;
return n=n+sum(n-1);
}
需要注意的是,如果不给递归添加一个终止条件的话,程序将会一直运行下去直到发生栈溢出错误。
Exception in thread “main” java.lang.StackOverflowError
如果没有终止条件:
if(n==1)
return 1;
的话将会发生上述错误。
递归的过程图:
同理如果使用非递归方法计算5的阶乘:
public static void main(String args[]){
int n=5;
int output = methon(n);
System.out.println(output);
}
public static int methon(int n){
int temp =1;
for(int i=n;i>0;i--)
temp =temp*i;
return
}/* Output:
120
*/
如果使用递归调用只需要将求和的递归函数的“+”号变成" * "号即可
public static void main(String args[]){
int n=5;
int output = sum(n);
System.out.println(output);
}
public static int sum(int n){
if(n==1)
return 1;
return n=n*sum(n-1);
}/* Output:
120
*/
return 语句的执行结果如下:
return n=5*sum(5-1);
return n=5*4*(4-1);
return n=5*4*3*sum(3-1);
return n=5*4*3*2*sum(2-1);
//当n=1时,执行if(n==1)条件语句,返回值为1,此时递归结束。