java 递归求 数字分解
问题 :给一个数字,求它所有的加法组合
比如 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 递归求 数字分解相关推荐
- c语言程序中要用到阶乘,C程序使用递归求数字的阶乘
C程序使用递归求数字的阶乘 在此示例中,您将学习查找用户使用递归输入的非负整数的阶乘. 要理解此示例,您应该了解以下C语言编程主题: 正数n的阶乘由下式给出: 示例factorial of n (n! ...
- 递归回溯--数字分解java代码
/* * 5.数字分解 * * 6 * 6 * 5+1 * 4+2 * 4+1+1 * 3+3 * 3+2+1 * 3+1+1+1 * 2+2+2 ...
- java运算符与数字分解,看完对java更加有信心了(主除以和取余的理解)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 运算符: 1.赋值运算符:= 2.算术运算符:+ ,- ,* (乘), / (除),%(取余),++(自增) ,--(自减) 3.关 ...
- Java递归求斐波那契数求猴子吃桃
递归求斐波那契数 斐波那契数是指前两位是1,后面的数依次是其前两位的和.即1,1,2,3,5,8-给你一个 n,求其值是多少 public class recursionExercise01{//定义 ...
- Java 递归求阶乘
需求: .用递归求5的阶乘,并把结果显示在控制台输出 分析: 1.阶乘:一个正整数的阶乘是所有小于及等于该数的正整数的积,自然数n的阶乘写作n! 5!=5*4*3*2* ...
- 数字旋转方阵c语言主函数,数据结构——递归求数字旋转方阵
[数字旋转方阵问题] 问题描述:输出下图所示N×N(N≥1)的数字旋转方阵.要求:采用递归法实现. 提示:注意观察A.B.C.D四个区域. void FillInNum(int number, int ...
- 递归 - 求数字/字符串的全排列
例如: 字符串 abc,全排列为:abc,acb,bac,bca,cab,cba 数字 123,全排列为:123,132,213,231,312,321 代码: #include <iostre ...
- java 递归 求一个数的阶乘
public static int fn(int num){int result = 1;if (num >1)result = num * fn(num - 1);return result; ...
- java阶乘递归_java递归求阶乘,java实现递归阶乘详解
下面要给大家讲到的就是和java递归求阶乘相关的内容,那么你知道应该如何实现吗?一起通过下面的例子来详细的了解吧. 话不多说,就直接给大家上代码了!public class Factorial { p ...
最新文章
- 基于easyui开发Web版Activiti流程定制器详解(五)——Draw2d详解(一)
- 为Web应用建立基于JMX的管理系统
- 用python pandas按块读取超大csv/txt
- makefile文件的一些解读
- 图书室用计算机,电子阅览室使用
- [原创] IAR7.10安装注册教程
- 获取SQL-SERVER数据库insert into操作的主键返回值
- 使用 T-SQL 实现 base64 解码
- 运用Android ROM Manager应用安装ClockworkMod Recovery的详细教程
- 候鸟浏览器cookie登录教程
- 详细的设计文档该怎么写?请注意这些地方...
- H.266/VVC相关技术学习笔记3:帧内色度预测模式中的DM模式及其在N次会议上相关的提案总结
- java部门人员结构树
- 46. 常用的数学工具类3-反三角函数的使用
- IDEA的基本使用:让你的IDEA有飞一般的感觉
- 花呗的24期利息计算器_花呗利息怎么算 利息计算器算一算花呗分期付款利率
- Cf252中子发射能谱模型
- 3D Slicer简单三维重建
- python数据科学常国珍_《PYTHON数据科学:全栈技术详解》常国珍//赵仁乾//张秋剑著【摘要 书评 在线阅读】-苏宁易购图书...
- Revit二次开发—获取并修改指定标高
热门文章
- 【LeetCode题解】347_前K个高频元素(Top-K-Frequent-Elements)
- 计算机实际应用的例子,作业二:单工通信;半双工通信; 双工通信;有哪些实际应用的例子...
- 华硕B460m plus+Intel 10400+AMD 5500xt黑苹果EFI引导文件
- html图片后边自动底部对齐,css实现图片与文字底边对齐
- Python字符串操作集锦之字符串映射表
- 自媒体如何推广?推广的渠道有哪些?
- SQL审核 | SQLE 二次开发环境搭建
- JAVA基础个人总结,不喜勿喷
- 最新版一键生成小程序系统 前段源码 小程序开发者必备
- ASP.NET Form Authentication - Membership Authentication