Java 迭代到递归 private int array[][]=new int[5][5]; 私有无效数组迭代(){ for(int i=0;i

Java 迭代到递归 private int array[][]=new int[5][5]; 私有无效数组迭代(){ for(int i=0;i,java,recursion,Java,Recursion,我可以将迭代方法更改为执行相同任务的递归方法吗 编辑(这是我尝试过的,但它只是在玩我想做的事情): private void arrayRecursion(){ if(){ 数组[i][i]=10;//基 回来 } for(int i=0;i

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

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

private void arrayRecursion(){
if(){
数组[i][i]=10;//基
回来
}
for(int i=0;i
是的,你可以。然而,你不应该这样做。我可以用汇编代码编写所有应用程序,但这并不是一个好主意:-)

有一些算法天生适合递归,它们的操作可以用较小数据集或较小值(树遍历、阶乘等)上的相同操作来表示


将数组初始化为全零不是这些事情之一。

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

有一些算法天生适合递归,它们的操作可以用较小数据集或较小值(树遍历、阶乘等)上的相同操作来表示


将数组初始化为全零不是这些事情之一。

这里有一种方法可以做到这一点。基本上从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]
符号的数组来说,这不是问题

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

这里有一种方法你可以做到。基本上从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]
符号的数组来说,这不是问题

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


你可以,但是为什么呢?你试过什么吗?或者你想让我们为你写代码吗?不,这不是家庭作业。如果是的话,我会贴上正确的标签!我想应该有一个标签叫“不是家庭作业”。并不是这里的每个人都在努力做作业。@Nath公平地说,这类似于一个看起来像作业的问题,而且课程才刚刚开始,所以我可以看到这是一个“我们想得到一个衡量标准,来衡量你对本课程中需要的一些概念的了解程度。让我们看看谁能做这种作业。”你可以,但是为什么呢?你试过什么吗?或者你想让我们为你写代码吗?不,这不是家庭作业。如果是的话,我会贴上正确的标签!我想应该有一个标签叫“不是家庭作业”。这里并不是每个人都在努力做作业。@Nath公平地说,这类似于一个看起来像作业的问题,而且课程才刚刚开始,所以我可以认为这是一个“我们想得到一个衡量标准,来衡量你对本课程中需要的一些概念的了解程度。让我们看看谁能完成此类作业。”你可以(意味着你有足够的知识和技能)在汇编中编写所有应用程序?:-O。但可能不是时候。循环不会产生递归调用的堆栈帧开销。它们不是一回事。@Alxandr在汇编中编写应用程序实际上不需要那么多知识和技能。我的意思是,你必须记住所有的操作码,或者至少有能力查找它们,但我不认为这与查找任何其他新框架或语言有什么不同。它确实需要相当多的耐心和时间,而大多数人都没有。@Nath绝对有。关键是这不是它们中的一个。现在如果你专门查找“我想训练我的大脑认识到如何将迭代过程转化为递归过程”,这样就没那么糟糕了。事实上,理解递归的一个很好的练习可能是将我所写的内容进行优化,使其在传播时不会重叠。:)你可以(意味着你有足够的知识和技能)在汇编中编写所有应用程序?:-O。但可能不是时候。循环不会产生递归调用的堆栈帧开销。它们不是一回事。@Alxandr在汇编中编写应用程序实际上不需要那么多知识和技能。我的意思是,你必须记住所有的操作码,或者至少有能力查找它们,但我不认为这与查找任何其他新框架或语言有什么不同。它确实需要相当多的耐心和时间,而大多数人都没有。@Nath绝对有。关键是这不是它们中的一个。现在如果你只查找“我想训练我的大脑认识到如何将迭代过程转化为递归过程“那就没那么糟了。事实上,理解递归的一个很好的练习可能是将我编写的内容进行优化,使其在扩展时不重叠。:)把一个简单的七行迭代代码变成一个递归庞然大物,这正是你不应该这么做的原因:-)我停止我的案子,法官大人。把一个简单的七行迭代代码变成一个递归庞然大物,这正是你不应该这么做的原因:-)我停止我的案子,法官大人。
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
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>