首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用递归打印从[0,0,0,0]到[9,9,9,9]I的数组

使用递归打印从[0,0,0,0]到[9,9,9,9]I的数组
EN

Stack Overflow用户
提问于 2017-07-24 01:21:22
回答 1查看 51关注 0票数 1

我只想使用递归打印一个从0,0,0到9,9,9,9的数组。首先,我编写了如下代码:

代码语言:javascript
运行
复制
public class PrintNumber {
    public static void main(String[] args) {
        int N = 4;
        int[] number = new int[N];
        PrintNumber printNumber = new PrintNumber();
        printNumber.printNum(number,0);
    }
    public void printNum(int[] number, int bit) {
        if (bit == number.length ) {
            System.out.println(Arrays.toString(number));
            return;
        }
        for (int i = 0; i < 10; i++) {
            number[bit] = i;
            /******** something goes wrong here ********/
            printNum(number, ++bit);
            /******** something goes wrong here ********/
        }
    }
}

如您所见,代码不是很多,但它不起作用。所以我调试了我的代码,我发现++bit (代码的最后一行)应该写成bit+1。然后,它工作得很好。

但是我真的很困惑,为什么呢?++bitbit+1都是将位加1,为什么它不适用于++bit,而适用于bit+1

非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2017-07-24 01:36:36

这是一个可行的解决方案。

代码语言:javascript
运行
复制
import java.util.Arrays;


public class TestTest {
    private static int N = 4;
    private static int MAX = 10;
     public static void main(String[] args) {

            int[] number = new int[N];
            TestTest printNumber = new TestTest();
            printNumber.printNum(number,0);
        }
        public void printNum(int[] number, int bit) {
            System.out.println(Arrays.toString(number));
            if (bit == MAX ) {
                return;
            }
            for (int i = 0; i < N; i++) {
                number[i] = bit;
            }
            printNum(number, ++bit);
        }
}

有几个问题:

  1. 您混合了循环和recurection.
  2. Wrong数组大小
  3. 数组值错误
  4. 错误打印if-
    1. 错误函数退出。

此代码产生堆栈溢出异常。但它适用于N = 3

代码语言:javascript
运行
复制
public class TestTest {
    private static int N = 3;
    private static int MAX = 10;
     public static void main(String[] args) {

            int[] number = new int[N];
            TestTest printNumber = new TestTest();
            printNumber.printNum(number);


        }
        public void printNum(int[] number) {
            System.out.println(Arrays.toString(number));
//          if (bit == MAX) {
//              return;
//          }
            boolean exit = true;
            for (int i = 0; i < N; i++) {
                if (number[i] != MAX - 1) {
                    exit = false;
                }
            }
            if (exit) {
                return;
            }
            number[N - 1]++;
            for (int i = N - 1; i >= 0; i--) {

                if (number[i] == MAX) {
                    if (i > 0) {
                        number[i - 1]++;
                        number[i] = 0;
                    }
                }
            }
            printNum(number);
        }
}

循环解决方案:

代码语言:javascript
运行
复制
public class TestTest {
    private static int N = 4;
    private static int MAX = 10;
     public static void main(String[] args) {

            int[] number = new int[N];
            TestTest printNumber = new TestTest();
//          printNumber.printNum(number);
            printNumber.printNumLoop(number);

        }
        private void printNumLoop(int[] number) {
            while(true) {

                System.out.println(Arrays.toString(number));
                number[N - 1]++;
                for (int i = N - 1; i >= 0; i--) {

                    if (number[i] == MAX) {
                        if (i > 0) {
                            number[i - 1]++;
                            number[i] = 0;
                        }
                    }
                }

                boolean exit = true;    
                for (int i = 0; i < N; i++) {
                    if (number[i] != MAX - 1) {
                        exit = false;
                    }
                }
                if (exit) {
                    System.out.println(Arrays.toString(number));
                    break;
                }
            }
    }
        public void printNum(int[] number) {

//          if (bit == MAX) {
//              return;
//          }
            boolean exit = true;
            for (int i = 0; i < N; i++) {
                if (number[i] != MAX - 1) {
                    exit = false;
                }
            }
            if (exit) {
                return;
            }
            number[N - 1]++;
            for (int i = N - 1; i >= 0; i--) {

                if (number[i] == MAX) {
                    if (i > 0) {
                        number[i - 1]++;
                        number[i] = 0;
                    }
                }
            }
            printNum(number);
        }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45267882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档