簡體   English   中英

Java數字模式遞歸

[英]Java Number Pattern 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

我對如何完成此問題的數字模式有些困惑。 有人有什么想法嗎?

因此,您需要編寫一個遞歸函數。 這種形式的東西:

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

最重要的部分是找到應該停止遞歸的正確退出條件。 在這種情況下,那就是num == 1

根據描述,對於數字k ,輸出為pattern(k - 1) + k + pattern(k - 1)

我已經寵壞了。 您可能需要提高效率。 例如,意識到您不需要運行pattern(k - 1)兩次,一次就足夠了。

我對如何完成此問題的數字模式有些困惑。

讓我們嘗試使用一些函數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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM