迭代到递归

时间:2011-08-31 23:39:57

标签: java recursion

private int array[][] = new int[5][5];

private void arrayIteration(){
    for(int i = 0; i < array.length; i++){
        for(int j = 0; j < array.length; j++){
            array[i][j] = 10;
        }
    }
}

我可以将迭代方法更改为递归执行相同任务的方法吗?

编辑(这是我尝试过的,但它只是在玩我想做的事情):

private void arrayRecursion(){
    if(){
        array[i][i] = 10;  // Base
        return;
    }
    for(int i = 0; i < array.length; i++){
        arrayRecursion();
    }
}

2 个答案:

答案 0 :(得分:6)

是的,你可以。但是,你不应该这样做。我可以用汇编代码编写我的所有应用程序,但这并不是一个好主意: - )

有一些算法可以自然地用于递归,那些操作可以用较小数据集上的相同操作或较小值(树遍历,阶乘,那种事物)表示。

将数组初始化为全零是其中之一。

答案 1 :(得分:1)

这是你可以做到的一种方式。基本上你从0,0角开始并将其设置为值。然后你做0,1和1,0。 0,1将设置,并执行1,1和1,2。 1,0将设置并执行2,0和1,1。请注意,1,1刚刚被击中两次 - 这很好,因为它覆盖了之前所做的事情。当它击中“墙”时它会停止(这意味着如果[3]数组为空,[4]不会被击中)但对于使用新的int[x][y]表示法分配的数组来说这不是问题。 / p>

class Sandbox {
    public static void main(String[] args) {
        int[][] test = new int[5][5];
        recursiveAssign(test,10);
        int numThatAreTen = 0;
        for(int i = 0; i < 5; i++) {
            for(int j = 0; j < 5; j++) {
                if(test[i][j] == 10) numThatAreTen++;
            }
        }
        System.out.println(numThatAreTen);
    } // main

    static void recursiveAssign(int[][] arr, int value) {
        recursiveAssign0(arr,value,0,0);
    } // recursiveAssign

    static private void recursiveAssign0(int[][] arr, int value, int x, int y) {
        if(arr != null && x < arr.length && arr[x] != null && y < arr[x].length) {
            arr[x][y] = value;
            // now go down, and across
            recursiveAssign0(arr,value,x+1,y);
            recursiveAssign0(arr,value,x,y+1);
        } 
    } // recursiveAssign0

} // Sandbox

打印预期的25

C:\Documents and Settings\glowcoder\My Documents>javac Sandbox.java

C:\Documents and Settings\glowcoder\My Documents>java Sandbox
25

C:\Documents and Settings\glowcoder\My Documents>