Java使用方法递归求1到n的和

使用方法递归计算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);

    }
}

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值