Java数字模式递归

时间:2014-12-06 21:47:52

标签: java recursion

我正在为一个用户输入数字的类实验室工作,并递归打印出一个数字模式。例如,

基本情况是,如果他们输入1,则会打印:1

如果他们输入2,则会打印:1 2 1

如果为3,则会打印:1 2 1 3 1 2 1

然后对于更大的东西,如果他们输入7,它将打印:

1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 5 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 6
1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 5 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 7
1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 5 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 6
1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 5 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1

我有点担心数字模式能够完成这个问题。有没有人有任何想法?

2 个答案:

答案 0 :(得分:1)

所以你需要编写一个递归函数。这种形式的东西:

private String pattern(int num) {
    // ...
}

最重要的部分是找到应该停止递归的正确退出条件。在这种情况下,那就是num == 1

根据描述,它看起来像是k, 输出为pattern(k - 1) + k + pattern(k - 1)

我已经被宠坏了太多。 您可能需要提高效率。 例如,意识到您不需要运行pattern(k - 1)两次, 它足以做一次。

答案 1 :(得分:0)

  

我有点坚持数字模式能够做到的   完成这个问题。

让我们尝试使用一些函数f
来分析序列 f(1)= 1(总位数= 1
f(2)= 1 2 1(总位数= 3
f(3)= 121 3 121(总位数= 7
f(4)= 1213121 4 1213121(总位数= 15
f(5)= 121312141213121 5 121312141213121(总数= 31

因此,您可以观察到总数字序列看起来像1,3,7,15,31,...... 2 ^ n-1
现在我们可以表达如下所述的逻辑(注意:为了帮助您更好地理解程序如何工作,我在每个级别打印序列)

public class SequenceGenerator {
    public static void main(String[] args) {
        generate(7);
    }

    static void generate(int depth) {
        recursiveGenerator(1, null, depth);
    }

    static void recursiveGenerator(int num, String prev, int limit) {
        if (num <= limit) {
            if (prev != null) {
                System.out.println();
            }
            if (prev != null) {
                System.out.printf("%s %d %s", prev, num, prev);

            } else {
                prev = "";
                System.out.printf("%d", num);
            }
            if (prev.equals("")) {
                prev += num + prev;
            } else {
                prev += " " + num + " " + prev;
            }
            recursiveGenerator(++num, prev, limit);
        }
    }
}

输出

1
1 2 1
1 2 1 3 1 2 1
1 2 1 3 1 2 1 4 1 2 1 3 1 2 1
1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 5 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1
1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 5 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 6 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 5 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1
1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 5 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 6 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 5 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 7 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 5 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 6 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1 5 1 2 1 3 1 2 1 4 1 2 1 3 1 2 1