Pascal的Triangle递归调用 - Java

时间:2017-10-29 20:12:59

标签: java recursion

我知道这个问题已经过时了,我解决了它的计算部分。但我的问题是主要的方法,我找不到它的解决方案。 我需要递归地调用Pascal三角函数,但也可以将它打印出来。我可以打印前10行,但我不知道如何翻转它是颠倒的。这是我的代码:

public class RecursivePascalTriangle {

    static int get_pascal(int row, int col) {
        if (col == 0 || col == row) {
            return 1;
        } else {
            return get_pascal(row - 1, col - 1) + get_pascal(row - 1, col);
        }

    }

    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            for (int k = 0; k <= i; k++) {
                System.out.print(get_pascal(i, k) + " ");
            }
            System.out.println();

        }
    }

}

任何人都可以帮助我吗?我被困在这里。我不想使用任何for循环。谢谢!

1 个答案:

答案 0 :(得分:0)

现在,一切都是递归的。

public class RecursivePascalTriangle {

    private static String[] levels;

    public static int get_pascal(int row, int col) {
        if (col == 0 || col == row) {
            return 1;
        } else {
            return get_pascal(row - 1, col - 1) + get_pascal(row - 1, col);
        }

    }

    public static void main(String[] args) {

        //row size variable
        int rowNum = 10;

        levels = new String[rowNum];

        int i = 0;
        int arIndex = 0;
        System.out.println(recurseRow(i, rowNum, arIndex));

        System.out.println("---------------\nUpside Down\n----");
        System.out.println(upsideDown(rowNum-1));

    }

    //Recursion for row
    public static String recurseRow(int i, int rowNum, int arrayIndex) {
        if( i == rowNum)
            return "";
        else {
            int k = 0;
            int next = i + 1;
            String str = recurseCol(i, k);
            levels[arrayIndex] = str;
            arrayIndex += 1;
            return  str + "\n" + recurseRow(next, rowNum, arrayIndex);
        }
    }

    //Recursion for column
    public static String recurseCol(int i, int k) {
        if(k > i) 
            return "";
        else {
            int next = k + 1;
            return get_pascal(i, k) + " " + recurseCol(i, next);
        }
    }


    //upside down recursion
    public static String upsideDown(int index) {
        if(index < 0) {
            return "";
        }

        else {
            String str = levels[index];
            index -= 1;
            return str + "\n" + upsideDown(index);
        }
    }
}