递归打印指定长度二进制数的Java代码重复输出问题排查
递归打印二进制数问题修复
错误原因
重复输出是代码中存在多余的外层位置遍历循环导致的:你的递归逻辑已经通过index参数控制当前要赋值的二进制位,不需要额外加for(int i =index;i<k;i++)循环遍历位置,这层循环会导致同一位被多次触发赋值逻辑,最终产生重复结果。
修正后代码
import java.util.Arrays; public class PrintBinaryNum { public static void printBinary(int num[], int k, int index) { // 递归终止条件:所有位都赋值完成 if(index == k) { System.out.println(Arrays.toString(num)); return; } // 只处理当前index位置的取值,不需要循环遍历位置 for(int j=0;j<=1;j++) { num[index] = j; // 递归处理下一位 printBinary(num, k, index+1); } } public static void main(String[] args) { int a[] = new int[2]; printBinary(a, 2, 0); } }
输出结果
运行修正后代码,k=2时的输出为:
[0, 0] [0, 1] [1, 0] [1, 1]
没有重复结果,符合预期。
内容的提问来源于stack exchange,提问作者Sameer
相关产品推荐
相关产品推荐

