递归可以理解成方法自己调用方法自己,所以一旦使用不当就可能导致溢出错误
一般情况下是不使用递归方法的
一,首先不使用递归的方式分别写1-N的累加和N的阶乘
1-N的累加
public class Sum {
public static int sum(int a) {//定义一个int返回值类型
int result = 0;
for(int i=1;i<=a;i++) {//使用for循环 还可以这样写for(int i = a; i>=1; i--)
result += i ;
}
return result;//返回值类型不为void,所以必须有一个return 返回值
}
N的阶乘
其实跟累加是一样的,只需要把+改成*即可
public static int jiecheng(int a) {
int result = 1; //因为是相乘,所以result不能为0
for(int i = 1; i<=a; i++) {//或者for(int i = a; i>=1; i--)
result*=i;
}
return result;
}
二,使用递归的方法分别写1-N的累加和N的阶乘
1-N的累加
public static int sum1(int a) {
if(a == 1) { //当a等于1时,停止方法的继续调用,开始弹栈
return 1;
}
return a + sum1(a-1);//其实这里就是a+ a-1 +(a-1)-1 +((a-1)-1)-1 +......直到a等于1
}
N的阶乘
public static int jiecheng1(int a) {
if(a == 1) {
return 1;
}
return a*jiecheng1(a-1);
}