使用方法递归计算1到n的和
1.成行代码
代码如下(示例):
方法一:较为粗糙,建议运行错误案例加深对方法递归的理解,并通过错误案例完成方式一,掌握方法递归和方式二。
//方法递归(1)
public static int sum02(int n,int nums){
if(n==0){
return nums;
}
nums+=n;
n--;
nums = sum02(n,nums);
return nums;
/* if(n==0){
return nums;
}
nums+=n;
n--;
System.out.println("n:"+n);
System.out.println("nums:"+nums);
sum02(n,nums);//最后一次nums 确实是5500 但是没有返回值 返回到第一次执行的时候num还是100
System.out.println("nums:"+nums);
return nums;//100.......5500 .......100
*/
}
错误方法
public static int sum02(int n,int nums){
if(n==0){
return nums;
}
nums+=n;
n--;
System.out.println("n:"+n);
System.out.println("nums:"+nums);
sum02(n,nums);//最后一次nums 确实是5500 但是没有返回值 返回到第一次执行的时候num还是100
System.out.println("nums:"+nums);
return nums;//100.......5500 .......100
}
方式二,语言简洁
//方法递归(2)
public static int sum03(int n ){
if(n==1){
return 1;
}
return n+sum03(n-1);
}
2.思路
1).1到n求和,即变量 int n (末尾值),int sum(总数)
2).在方法中 (假象参数)参数 : 初始值1 末尾值n 存放总数的sum
3).若开始使用初始值(1)进行求和,即使用自加1放入sum求和,但如果简化,即使用末尾值进行求和,使用自减1进行求和。即现在现在剩下两个参数 sum 和n。
3.总结
使用方式递归要考虑其返回值是否有被接收
public class RecusionTest02 {
public static void main(String[] args){
System.out.println(sum(100));
System.out.println(sum01(100));
System.out.println(sum02(100,0));
System.out.println(sum03(100));
}
//计算1到n的和
public static int sum(int n){
int nums=0;
for(int i = 1 ; i<=n ; i++){
nums+=i;
}
return nums;
}
//(100+1)*(100/2)
public static int sum01(int n ){
if(n%2==1){
return (n*((n-1)/2)+n);
}
return (n+1)*(n/2);//(n+2)不加括号也可以,只是便于理解
}
//方法递归(1)
public static int sum02(int n,int nums){
if(n==0){
return nums;
}
nums+=n;
n--;
nums = sum02(n,nums);
return nums;
/*if(n==0){
return nums;
}
nums+=n;
n--;
System.out.println("n:"+n);
System.out.println("nums:"+nums);
sum02(n,nums);//最后一次nums 确实是5500 但是没有返回值 返回到第一次执行的时候num还是100
System.out.println("nums:"+nums);
return nums;//100.......5500 .......100*/
}
//方法递归(2)
public static int sum03(int n ){
if(n==1){
return 1;
}
return n+sum03(n-1);
}
}