【发布时间】:2018-10-20 05:59:59
【问题描述】:
我想在从递归返回后保留以前的值。 它适用于 COUNT,但 Array 没有保存我想要的先前值。
结果是:
递归前[0, 0, 0, 0]计数:0
递归前[0, 1, 0, 0]计数:1
递归前[0, 1, 2, 0]计数:2
递归前[0, 1, 2, 3]计数:3
递归后[0, 1, 2, 3]计数:3
递归后[0, 1, 2, 3]计数:2
递归后[0, 1, 2, 3]计数:1
递归后[0, 1, 2, 3]count: 0
但我想要的结果是:
递归前[0, 0, 0, 0]计数:0
递归前[0, 1, 0, 0]计数:1
递归前[0, 1, 2, 0]计数:2
递归前[0, 1, 2, 3]计数:3
递归后[0, 1, 2, 3]计数:3
递归后[0, 1, 2, 0]计数:2
递归后[0, 1, 0, 0]count: 1
递归后[0, 0, 0, 0]count: 0
import java.util.Arrays;
import java.util.Scanner;
public class main {
public static void boarder(int board[],int count)
{
if(count==4)
{
return;
}
board[count]=count;
int temp=count+1;
System.out.println("before recursion"+Arrays.toString(board)+"count: "+(count));
boarder(board,temp);
System.out.println("After recursion"+Arrays.toString(board)+"count: "+(count));
}
public static void main(String[] args)
{
int count=0;
int board[]={0,0,0,0};
//state tic=new state(board);
boarder(board,0);
}
}
【问题讨论】:
-
这是一个典型的引用问题。请记住,
board数组是通过引用传递并在回归调用堆栈中进行操作的单个对象。如果要在回归调用返回时打印数组的状态,则必须将数组的副本保存在局部变量中才能打印出来。 -
通过复制数组,我的意思是创建一个新对象(克隆),因此在回归调用之前保存数组的状态。像这样stackoverflow.com/q/14149733/2727717