白云区做网站,互动营销名词解释,建设银行网站怎么登陆不了了,怎么让网站被百度收录问题描述#xff1a;求一个正整数是哪几个正整数相加的和 (这些数要各不相同)
说明#xff1a;给定一个正整数#xff0c;如8#xff0c;要求输出以下数组#xff0c;因为他们的和为8#xff1a;
[1, 2, 5]
[1, 3, 4]
[1, 7]
[2, 6]
[3, 5]
[8] 代码是一个牛人写的…问题描述求一个正整数是哪几个正整数相加的和 (这些数要各不相同)
说明给定一个正整数如8要求输出以下数组因为他们的和为8
[1, 2, 5]
[1, 3, 4]
[1, 7]
[2, 6]
[3, 5]
[8] 代码是一个牛人写的我只是加了几个语句来输出程序具体的执行过程
package com.joe;
import java.util.LinkedList;
public class T { static LinkedListInteger list new LinkedListInteger(); public static void split(int n, int base) { if (n 0) { System.out.println(找到一个组合 list); System.out.println(); return; } for (int i base 1; i n; i) { list.addLast(i); System.out.println(添加 i , 当前list list , 进入递归调用split( (n-i) , i )); split(n - i, i); // n-i 实际上是把之前所添加进list的数都减掉等于0时说明list中的数加起来刚好等于n System.out.print(当前list list , 删除最后一个元素); int delNum list.removeLast(); // 从下层递归返回才会执行这句最后一个添加的数不符合要求 System.out.print(delNum); System.out.println(。返回到上层递归中的for循环此时list list i i , 执行i后判断i n ,再继续。); } } public static void main(String[] args) { split(8, 0); }
} 运行结果
添加1, 当前list [1], 进入递归调用split(7, 1)添加2, 当前list [1, 2], 进入递归调用split(5, 2)添加3, 当前list [1, 2, 3], 进入递归调用split(2, 3)当前list [1, 2, 3], 删除最后一个元素3。返回到上层递归中的for循环此时list [1, 2]i3, 执行i后判断i5,再继续。添加4, 当前list [1, 2, 4], 进入递归调用split(1, 4)当前list [1, 2, 4], 删除最后一个元素4。返回到上层递归中的for循环此时list [1, 2]i4, 执行i后判断i5,再继续。添加5, 当前list [1, 2, 5], 进入递归调用split(0, 5)找到一个组合[1, 2, 5]
当前list [1, 2, 5], 删除最后一个元素5。返回到上层递归中的for循环此时list [1, 2]i5, 执行i后判断i5,再继续。当前list [1, 2], 删除最后一个元素2。返回到上层递归中的for循环此时list [1]i2, 执行i后判断i7,再继续。添加3, 当前list [1, 3], 进入递归调用split(4, 3)添加4, 当前list [1, 3, 4], 进入递归调用split(0, 4)找到一个组合[1, 3, 4]
当前list [1, 3, 4], 删除最后一个元素4。返回到上层递归中的for循环此时list [1, 3]i4, 执行i后判断i4,再继续。当前list [1, 3], 删除最后一个元素3。返回到上层递归中的for循环此时list [1]i3, 执行i后判断i7,再继续。添加4, 当前list [1, 4], 进入递归调用split(3, 4)当前list [1, 4], 删除最后一个元素4。返回到上层递归中的for循环此时list [1]i4, 执行i后判断i7,再继续。添加5, 当前list [1, 5], 进入递归调用split(2, 5)当前list [1, 5], 删除最后一个元素5。返回到上层递归中的for循环此时list [1]i5, 执行i后判断i7,再继续。添加6, 当前list [1, 6], 进入递归调用split(1, 6)当前list [1, 6], 删除最后一个元素6。返回到上层递归中的for循环此时list [1]i6, 执行i后判断i7,再继续。添加7, 当前list [1, 7], 进入递归调用split(0, 7)找到一个组合[1, 7]
当前list [1, 7], 删除最后一个元素7。返回到上层递归中的for循环此时list [1]i7, 执行i后判断i7,再继续。当前list [1], 删除最后一个元素1。返回到上层递归中的for循环此时list []i1, 执行i后判断i8,再继续。添加2, 当前list [2], 进入递归调用split(6, 2)添加3, 当前list [2, 3], 进入递归调用split(3, 3)当前list [2, 3], 删除最后一个元素3。返回到上层递归中的for循环此时list [2]i3, 执行i后判断i6,再继续。添加4, 当前list [2, 4], 进入递归调用split(2, 4)当前list [2, 4], 删除最后一个元素4。返回到上层递归中的for循环此时list [2]i4, 执行i后判断i6,再继续。添加5, 当前list [2, 5], 进入递归调用split(1, 5)当前list [2, 5], 删除最后一个元素5。返回到上层递归中的for循环此时list [2]i5, 执行i后判断i6,再继续。添加6, 当前list [2, 6], 进入递归调用split(0, 6)找到一个组合[2, 6]
当前list [2, 6], 删除最后一个元素6。返回到上层递归中的for循环此时list [2]i6, 执行i后判断i6,再继续。当前list [2], 删除最后一个元素2。返回到上层递归中的for循环此时list []i2, 执行i后判断i8,再继续。添加3, 当前list [3], 进入递归调用split(5, 3)添加4, 当前list [3, 4], 进入递归调用split(1, 4)当前list [3, 4], 删除最后一个元素4。返回到上层递归中的for循环此时list [3]i4, 执行i后判断i5,再继续。添加5, 当前list [3, 5], 进入递归调用split(0, 5)找到一个组合[3, 5]
当前list [3, 5], 删除最后一个元素5。返回到上层递归中的for循环此时list [3]i5, 执行i后判断i5,再继续。当前list [3], 删除最后一个元素3。返回到上层递归中的for循环此时list []i3, 执行i后判断i8,再继续。添加4, 当前list [4], 进入递归调用split(4, 4)当前list [4], 删除最后一个元素4。返回到上层递归中的for循环此时list []i4, 执行i后判断i8,再继续。添加5, 当前list [5], 进入递归调用split(3, 5)当前list [5], 删除最后一个元素5。返回到上层递归中的for循环此时list []i5, 执行i后判断i8,再继续。添加6, 当前list [6], 进入递归调用split(2, 6)当前list [6], 删除最后一个元素6。返回到上层递归中的for循环此时list []i6, 执行i后判断i8,再继续。添加7, 当前list [7], 进入递归调用split(1, 7)当前list [7], 删除最后一个元素7。返回到上层递归中的for循环此时list []i7, 执行i后判断i8,再继续。添加8, 当前list [8], 进入递归调用split(0, 8)找到一个组合[8]
当前list [8], 删除最后一个元素8。返回到上层递归中的for循环此时list []i8, 执行i后判断i8,再继续。