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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/dzgt10076/article/details/51706372

递归实现输出正整数和等于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--;
        }
        //如果都没有,说明分解完毕,
    }

}

运行结果
这里写图片描述

展开阅读全文

没有更多推荐了,返回首页