JAVA:递归实现输出正整数和等于n的所有不增的正整数和式

递归实现输出正整数和等于n的所有不增的正整数和式(JAVA)

  • 碰到递归,瞬间感觉脑细胞不够用了 其实感觉并没有用到递归的精髓,更像是穷举遍历,把后面的判断条件放到外面main函数 就完全是穷举了
  • 关于数组的使用,是受到书本上的提示
package pers.mine.test;

public class ToDo {
    int []a=new int[20];
    int oneNum=0;
    public static void main(String[] args) {
        ToDo one=new ToDo();
        one.oneNum=7;
        one.a[0]=one.oneNum;
        System.out.print(one.oneNum+"=");
        System.out.printf("%2d\n",one.oneNum);
        one.exOne(one.oneNum, 0);
    }

    public void exOne(int num,int end){//表示最后一个位置是end,要分解的数为num
        //分解
        a[end]=a[end]-1;
        int orther=num-a[end];//剩余值
        if(orther<=a[end]){
            a[end+1]=orther;//放入  
            end++;//使end与当前指向匹配
        }else{
            do{
                a[end+1]=a[end];
                end++;
                orther=orther-a[end];
            }while(orther>a[end]);
            a[end+1]=orther;//放入
            end++;
        }
        //后续没清除的值会影响计算结果
        int len=a.length;
        while((end+1)<=(len-1)&&a[end+1]!=0){
            a[end+1]=0;
            end++;//end与指向匹配
        }
        //输出数组
        int i=0;
        System.out.print(this.oneNum+"=");
        while(a[i]!=0){
            if(i==0){
                System.out.printf("%2d",a[i]);
            }else{
                System.out.printf("+%2d",a[i]);
                }
                i++;
        }
        System.out.println();
        //判断数组里的值有没有大于1的,有的话,继续分解

        int one=end;
        int temp=0;
        while(one>=0){
            temp=temp+a[one];
            if(a[one]>1){
                this.exOne(temp, one);
                one=end; 
            }
            one--;
        }
        //如果都没有,说明分解完毕,
    }

}

运行结果
这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值