递归和通过引用传递的参数
Recursion and parameters passed by reference
有人可以用非常简单的术语解释为什么下面的代码输出 35 而不是 999 当数组本质上是通过引用传递并且 temp[0] 是 999 并作为 num1 传递到 someFunction() 时。
public class 测试B
{
public static void main(String[] args)
{
int[] num1 = {35};
someFunction(num1, 3);
System.out.println(num1[0]); //prints 35
}
public static void someFunction(int[] num1, int count){
if (count!= 0){
int[] temp = {999};
someFunction(temp, count-1);
}
}
}
someFunction
不读取或写入 num1
参数。因此,根据定义 someFunction
不能影响从 main
.
传入的 num1
数组
无论您选择的语言中的数组参数是按引用还是按值传递,情况都会如此。
As I trace through the algorithm, on the second call, num1[0] is 999
and continues to be until I return back to main.
我怀疑您对 main
中的变量名和 someFunction
中的参数名相同这一事实感到困惑。您看到 num1
设置为特定值 - 但那不是 main
的 num1
- 那是 someFunction
的 num1
。为了在调试时更清楚,将其中之一的名称(main
中的变量名称或 someFunction
中的参数名称)更改为 bob
。
就你试图达到的结果而言,我怀疑,也许不是:
public static void someFunction(int[] num1, int count){
if (count!= 0){
int[] temp = {999};
someFunction(temp, count-1);
}
}
你可能想写:
public static void someFunction(int[] num1, int count){
if (count!= 0){
num1[0] = 999;
someFunction(num1, count-1);
}
}
请特别注意(根据我的建议更改)someFunction
将写入 num1
参数(传入的参数,而不是新的 temp
数组)- 所以main
中的数组将反映该更改。
有人可以用非常简单的术语解释为什么下面的代码输出 35 而不是 999 当数组本质上是通过引用传递并且 temp[0] 是 999 并作为 num1 传递到 someFunction() 时。
public class 测试B {
public static void main(String[] args)
{
int[] num1 = {35};
someFunction(num1, 3);
System.out.println(num1[0]); //prints 35
}
public static void someFunction(int[] num1, int count){
if (count!= 0){
int[] temp = {999};
someFunction(temp, count-1);
}
}
}
someFunction
不读取或写入 num1
参数。因此,根据定义 someFunction
不能影响从 main
.
num1
数组
无论您选择的语言中的数组参数是按引用还是按值传递,情况都会如此。
As I trace through the algorithm, on the second call, num1[0] is 999 and continues to be until I return back to main.
我怀疑您对 main
中的变量名和 someFunction
中的参数名相同这一事实感到困惑。您看到 num1
设置为特定值 - 但那不是 main
的 num1
- 那是 someFunction
的 num1
。为了在调试时更清楚,将其中之一的名称(main
中的变量名称或 someFunction
中的参数名称)更改为 bob
。
就你试图达到的结果而言,我怀疑,也许不是:
public static void someFunction(int[] num1, int count){
if (count!= 0){
int[] temp = {999};
someFunction(temp, count-1);
}
}
你可能想写:
public static void someFunction(int[] num1, int count){
if (count!= 0){
num1[0] = 999;
someFunction(num1, count-1);
}
}
请特别注意(根据我的建议更改)someFunction
将写入 num1
参数(传入的参数,而不是新的 temp
数组)- 所以main
中的数组将反映该更改。