模拟嵌套循环

在初学者的编程书(免费许可证)中,有以下代码,在Java中动态创建嵌套循环:

import java.util.Scanner; public class RecursiveNestedLoops { public static int numberOfLoops; public static int numberOfIterations; public static int[] loops; public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("N = "); numberOfLoops = input.nextInt(); System.out.print("K = "); numberOfIterations = input.nextInt(); input.close(); loops = new int[numberOfLoops]; nestedLoops(0); } public static void nestedLoops(int currentLoop) { if (currentLoop == numberOfLoops) { printLoops(); return; } for (int counter=1;counter <= numberOfIterations;counter++) { loops[currentLoop] = counter; nestedLoops(currentLoop + 1); } } public static void printLoops() { for (int i = 0; i < numberOfLoops; i++) { System.out.printf("%d ", loops[i]); } System.out.println(); } } 

一世

输入N = 2和K = 3时,屏幕上应打印[1,1],[1,2],[1,3],[2,1],[2,2],[2] ,3],[3,1],[3,2],[3,3](换行等)。 该程序工作正常。 然后我尝试调试它,并花了很长时间试图了解它是如何工作的。 我不能。 我的问题:

—->为什么在打印[1,3]之后变量’curentLoop’变为’0’之前是’1’?

另外: – >在我的调试器(Eclipse内置)打印[1,3]后,指针转到方法’nestedLoops’的末端’}’大括号(带有’currentLoop’,值为1),然后突然它用’currentLoop’= 0开始执行for循环。变量从哪里取值’0’? 为什么在转到方法的结束后,它开始执行’for循环’,而不调用方法的名字?

这对你们中的一些人来说可能是一个非常容易的问题; 我只是个初学者。 预先感谢您的帮助。

因为它是对嵌套循环的递归调用。 首先,它用0调用,然后用1.调用,然后用2.当它达到总循环数时,它开始执行循环(这称为递归终止条件)。 然而,每次对嵌套循环的调用都放在堆栈上,它执行k,然后返回并执行k-1,然后返回并执行k-2,然后返回并执行k-3一直到k-k = 0 。

如果我是你,我会在内部调用nestedloops()时放置一个断点,并观察它被调用的内容。 然后,就像它所说的那样,看着它的工作顺其自然。