Java划分理论中的递归
我一直在试图理解下一个递归,代码不是我的,它是一个计算n个数的划分理论的代码,但是它的递归,它让我困惑。谁能解释一下它是如何工作的,这样我才能最终理解它。谢谢Java划分理论中的递归,java,loops,for-loop,recursion,partition,Java,Loops,For Loop,Recursion,Partition,我一直在试图理解下一个递归,代码不是我的,它是一个计算n个数的划分理论的代码,但是它的递归,它让我困惑。谁能解释一下它是如何工作的,这样我才能最终理解它。谢谢 package practicingjava; import java.util.Scanner; /** * @author JVASQUEZ */ public class PracticingJava { public static void main(String[] args) { Scanner
package practicingjava;
import java.util.Scanner;
/**
* @author JVASQUEZ
*/
public class PracticingJava {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
partition(n, n, "");
}
public static void partition(int max, int n, String prefix) {
if (n == 0) {
System.out.println(prefix);
}
for (int i = Math.min(max, n); i >= 1; i--) {
partition(i, n - i, prefix + " " + i);
}
}
}
有关java中递归的更基本的入门知识:
但在这种情况下,分区被调用一次,然后继续调用自己,直到n达到零。这就是前面的if语句所做的。如果那个If语句不存在,它将在无穷远处继续。然后循环从参数中提取变量,从而提取以前运行的方法。这样就把问题分解成更小的部分 如果您使用输入5调用它,它将打印
5
5
4 1
3 2
3 1 1
2 2 1
2 1 1 1
1 1 1 1 1
它基本上是把数字分解成更小的数字
当您输入5时,它用4和1调用递归函数
1无法分解
但它仍然是4
一旦堆栈完成,我就可以了--
所以新的数字是3和2
它继续这个递归背后的思想是,一个自然数N的所有可能都可以由一个数N-i和i的每个分区组成,每个分区使用小于i的自然数,每个1≤ 我≤ N∈ ℕ 并将0的分区集定义为空 如果数小于j的n的所有分区都是{n,j},那么n的所有分区都是
n, {0, n)
n-1, {1, n-1}
n-2, {2, n-2}
n-3, {3, n-3}
...
1, {n-1, 1}
其中n-1,{1,n-1}
是由{1,n-1}
组成的所有分区,每个分区都添加了前缀n-1
例如,分区为5(为清晰起见,省略分解中的最大值)
{5} =
i n-i
5, {0} -> 5
4, {1} -> 4, (1, {0}) -> 4, 1
3, {2} -> 3, (2, {0}) -> 3, 2
3, (1, {1}) -> 3, (1, 1, {0}) -> 3, 1, 1
2, {3} ->
2, (2, {1}) ->
2, 2, (1, {0}) -> 2, 2, 1
2, (1, {2}) ->
2, 1, 1, (1, {0}) -> 2, 1, 1, 1
1, {4} ->
1, (1, {3}) ->
1, 1, (1, {2}) ->
1, 1, 1, (1, {1}) ->
1, 1, 1, 1, {0} -> 1, 1, 1, 1