Tag: 递归

请逐步解释递归

请逐步解释递归; public class TestClass { private static void printit(int i) { if (i == 1) { return; } System.out.println(i); printit(i / 2); printit(i / 2); } public static void main(String args[]) { int i = 8; printit(i); } }

如何返回|| 声明在java中工作?

我是编程新手,所以我一直在CodingBat.com上练习。 在Recursion-2部分,有一个问题我无法解决(递归)所以我查找了一个答案。 找到的解决方案包含以下代码…… public boolean split53(int[] nums) { return helper(0, nums, 0, 0); } private boolean helper(int start, int[] nums, int sum1, int sum2) { if (start >= nums.length) return sum1 == sum2; if (nums[start] % 5 == 0) return helper(start + 1, nums, sum1 + nums[start], sum2); if (nums[start] % 3 == 0) return […]

递归方法打印4次

所以我正在学习如何通过Java使用递归。 我写了一个简单的程序,它将所有数字添加到1和n之间,它看起来就是这样做的。 我感到困惑的是print语句,它打印4次(对于解决方案的每个较小部分的每个结果),如果再次调用该方法并且条件尚未满足,我很困惑它是如何到达print语句的。 我理解这可以通过在main方法中创建一个int变量并将返回值赋给它来规避。 public static void main(String[] args) { int sum = recursiveCall(5); } public static int recursiveCall(int num) { int sum = 0; if(num == 1) { sum = 1; System.out.println(sum); return sum; } else { sum = recursiveCall(num – 1) + num; } // Notice it prints out all results of sum, […]

mergesort中的递归:两个递归调用

private void mergesort(int low, int high) { //line 1 if (low < high) { //line 2 int middle = (low + high)/2 ; //line 3 mergesort(low, middle); //line 4 mergesort(middle+1, high); //line 5 merge(low, middle, high); //line 6 }} //line 7 我理解当if语句为false时退出方法/函数的事实。 例如,如果我在main方法中调用mergesort(0, 5) ,则第一个mergesort(low, middle)将运行3次并终止,然后程序将转到第7行。 令我困惑的是当程序返回mergesort(middle+1, high);时,为什么high突然从0变为1 mergesort(middle+1, high); 在第5行。 这是一个类似但更简单的程序的另一个例子 public static void […]

递归到迭代Pascal的三角形

我想知道如何将递归函数/类转换为迭代函数/类。 我已经制作了一个递归的Pascal三角形,现在需要将它与迭代进行比较。 public class RecursivePascal extends ErrorPascal implements Pascal { private int n; RecursivePascal(int n) throws Exception { super(n); this.n = n; } public void printPascal() { printPascal(n, false); } public void printPascal(boolean upsideDown) { printPascal(n, upsideDown); } private void printPascal(int n, boolean upsideDown) { if (n == 0) { return; } if (!upsideDown) { […]

递归Java调用中的空结果

我正在处理以下CodingBat问题 : 给定一个包含一对括号的字符串,递归计算一个由括号及其内容组成的新字符串,因此“xyz(abc)123”产生“(abc)”。 parenBit(“xyz(abc)123”) → “(abc)” parenBit(“x(hello)”) → “(hello)” parenBit(“(xy)1”) → “(xy)” 我试图像这样解决它: import java.util.LinkedList; import java.util.List; public class ParenBit { public static void main(String arg[]) { ParenBit p = new ParenBit(); p.solve(arg[0], ‘(‘, “”); System.out.println(p.finalResult.toString()); } private List finalResult = new LinkedList(); private boolean solve(String s, char c, String result) { if (s.length() == […]

我的递归条件是否适合计算二叉树高度?

我试图在你的帮助下知道我的代码是对还是错,因为遗憾的是我无法检查它。 没有编译错误。 我想要做的是找到二叉树的高度 。 当然,树不必平衡。 二叉树中的每个节点可以有两个节点作为子节点 public int height(RBNode t) { if (t == null) return 0; int heightLeft = height(t.left); int heightRight = height(t.right); if (heightLeft > heightRight) { return heightLeft + 1; } else { return (heightRight + 1); } } 你认为递归条件是对的吗? 我的朋友声称它总会返回0。

在数组中交换奇数和偶数

我在这个网站上看到了这段代码。 它使用一种方法来排序一个数组,其中偶数出现在前面,而奇数出现在数组的后面。 我想知道你是否可以做同样的事情,除了先让奇数出现然后出现偶数? 我试过但无济于事。 我是java的新编码,我想测试递归。 public class Recurse { //i=left //j=right //first i tried to shift the whole thing //have all even numbers pop to the front of array when even public static int[] seperator(int[] arr1, int left, int right){ int temp; if(left>=right) //base case, return array return arr1; else if(arr1[left]%2!=0 && arr1[right]%2==0){//if match, do […]

递归暴力迷宫求解器Java

为了编写一个powershell迷宫来解决C程序,我首先编写了这个java程序来测试一个想法。 我是C的新手,打算在java中获得这个权利之后转换它。 结果,我试图远离arraylists,花式库等,以便更容易转换为C.程序需要生成一个最短步骤的单宽度路径来解决迷宫。 我认为我的问题可能在于片段化每个递归传递的路径存储数组。 谢谢你看这个。 -Joe maze: 1 3 3 3 3 3 3 3 3 3 3 0 0 0 3 3 0 3 3 3 0 3 3 3 2 Same maze solved by this program: 4 4 4 4 4 4 4 4 4 4 4 0 0 0 4 3 0 […]

字符串的排列

public class Permute { public static void main(String[] args) throws IOException { System.out.println(“Enter a string”); BufferedReader bufReader = new BufferedReader(new InputStreamReader(System.in)); String text = bufReader.readLine(); shuffle(“”,text); } public static void shuffle(String dummy, String input){ if(input.length() <= 1) System.out.println(dummy+input); else{ for(int i=0; i <input.length();i++){ input = input.substring(i,1) + input.substring(0,i) + input.substring(i+1); shuffle(dummy+input.substring(0,1),input.substring(1)); } } } } […]