问题 :给一个数字,求它所有的加法组合

比如 6的所有组合为:

5 1

4 2 4 1 1

3 3 3 2 1 3 1 1 1

2 2 2 2 2 1 1 2 1 1 1 1

1 1 1 1 1 1

代码如下:

public class Main{//a 缓冲  k:当前位置public static void f(int n, int[] a, int k) {if (n<=0) {for (int i=0; i<k; i++)System.out.print(a[i] + " ");System.out.println();return ;}for (int i=n; i>=1; i--) {if (k>0 && i > a[k-1]) continue;a[k] = i;f(n-i, a, k+1);}}public static void main(String[] args) {int[] a = new int[1000];f(6, a, 0);}
}

思路 :从大到小求解,首先是5, 然后剩下 1, 只有一种组合;4的话剩下2,有两种组合。因此可以递归求解。i从n开始不从n-1开始,是因为我们分解的子项也是一种组合,比如把6分为4和2, 2可以进行递归再分,但是4和2就是一种组合,所以i要从n开始。数组a的作用是保存每一次分解的子项。k的作用是记录当前保存到数组哪一个位置。打印条件是n<=0,意思也就是分解最后数字到1的时候进行打印。为了保证数组里的元素依次减小,因此设立条件k>0 && i > a[k-1]。

java 递归求 数字分解相关推荐

  1. c语言程序中要用到阶乘,C程序使用递归求数字的阶乘

    C程序使用递归求数字的阶乘 在此示例中,您将学习查找用户使用递归输入的非负整数的阶乘. 要理解此示例,您应该了解以下C语言编程主题: 正数n的阶乘由下式给出: 示例factorial of n (n! ...

  2. 递归回溯--数字分解java代码

    /*  * 5.数字分解    * * 6  *  6   *  5+1   *  4+2   *  4+1+1   *  3+3   *  3+2+1   *  3+1+1+1   *  2+2+2 ...

  3. java运算符与数字分解,看完对java更加有信心了(主除以和取余的理解)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 运算符: 1.赋值运算符:= 2.算术运算符:+ ,-  ,* (乘), / (除),%(取余),++(自增) ,--(自减) 3.关 ...

  4. Java递归求斐波那契数求猴子吃桃

    递归求斐波那契数 斐波那契数是指前两位是1,后面的数依次是其前两位的和.即1,1,2,3,5,8-给你一个 n,求其值是多少 public class recursionExercise01{//定义 ...

  5. Java 递归求阶乘

    需求:     .用递归求5的阶乘,并把结果显示在控制台输出 分析:     1.阶乘:一个正整数的阶乘是所有小于及等于该数的正整数的积,自然数n的阶乘写作n!         5!=5*4*3*2* ...

  6. 数字旋转方阵c语言主函数,数据结构——递归求数字旋转方阵

    [数字旋转方阵问题] 问题描述:输出下图所示N×N(N≥1)的数字旋转方阵.要求:采用递归法实现. 提示:注意观察A.B.C.D四个区域. void FillInNum(int number, int ...

  7. 递归 - 求数字/字符串的全排列

    例如: 字符串 abc,全排列为:abc,acb,bac,bca,cab,cba 数字 123,全排列为:123,132,213,231,312,321 代码: #include <iostre ...

  8. java 递归 求一个数的阶乘

    public static int fn(int num){int result = 1;if (num >1)result = num * fn(num - 1);return result; ...

  9. java阶乘递归_java递归求阶乘,java实现递归阶乘详解

    下面要给大家讲到的就是和java递归求阶乘相关的内容,那么你知道应该如何实现吗?一起通过下面的例子来详细的了解吧. 话不多说,就直接给大家上代码了!public class Factorial { p ...

最新文章

  1. 基于easyui开发Web版Activiti流程定制器详解(五)——Draw2d详解(一)
  2. 为Web应用建立基于JMX的管理系统
  3. 用python pandas按块读取超大csv/txt
  4. makefile文件的一些解读
  5. 图书室用计算机,电子阅览室使用
  6. [原创] IAR7.10安装注册教程
  7. 获取SQL-SERVER数据库insert into操作的主键返回值
  8. 使用 T-SQL 实现 base64 解码
  9. 运用Android ROM Manager应用安装ClockworkMod Recovery的详细教程
  10. 候鸟浏览器cookie登录教程
  11. 详细的设计文档该怎么写?请注意这些地方...
  12. H.266/VVC相关技术学习笔记3:帧内色度预测模式中的DM模式及其在N次会议上相关的提案总结
  13. java部门人员结构树
  14. 46. 常用的数学工具类3-反三角函数的使用
  15. IDEA的基本使用:让你的IDEA有飞一般的感觉
  16. 花呗的24期利息计算器_花呗利息怎么算 利息计算器算一算花呗分期付款利率
  17. Cf252中子发射能谱模型
  18. 3D Slicer简单三维重建
  19. python数据科学常国珍_《PYTHON数据科学:全栈技术详解》常国珍//赵仁乾//张秋剑著【摘要 书评 在线阅读】-苏宁易购图书...
  20. Revit二次开发—获取并修改指定标高

热门文章

  1. 【LeetCode题解】347_前K个高频元素(Top-K-Frequent-Elements)
  2. 计算机实际应用的例子,作业二:单工通信;半双工通信; 双工通信;有哪些实际应用的例子...
  3. 华硕B460m plus+Intel 10400+AMD 5500xt黑苹果EFI引导文件
  4. html图片后边自动底部对齐,css实现图片与文字底边对齐
  5. Python字符串操作集锦之字符串映射表
  6. 自媒体如何推广?推广的渠道有哪些?
  7. SQL审核 | SQLE 二次开发环境搭建
  8. JAVA基础个人总结,不喜勿喷
  9. 最新版一键生成小程序系统 前段源码 小程序开发者必备
  10. ASP.NET Form Authentication - Membership Authentication