在Java中,当我将数组传递给递归方法时,会得到一个错误。 封装测试; 导入java.io.BufferedReader; 导入java.io.InputStreamReader; 导入java.io.PrintWriter; 导入java.io.IOException; 公共类树操作{ 公共静态int minDepthBT(int[]a,int i) { 如果((i

在Java中,当我将数组传递给递归方法时,会得到一个错误。 封装测试; 导入java.io.BufferedReader; 导入java.io.InputStreamReader; 导入java.io.PrintWriter; 导入java.io.IOException; 公共类树操作{ 公共静态int minDepthBT(int[]a,int i) { 如果((i,java,recursion,methods,Java,Recursion,Methods,你的问题在这里: int Sum(int a[]) { int sum =0; for(int i=0;i<a,length;i++) sum += a[i]; return sum; } 比如说 您的方法声明有两个参数:int数组和int 这里,您正在调用方法…使用两个int值 长话短说:当递归调用方法时,您必须准确地提供所需的参数;在您的情况下:您可能只需要使用(a,2*i)进行调用 编辑: 或者,您必须执行以下操作: int x = m

你的问题在这里:

  int Sum(int a[])
   {
     int sum =0;
     for(int i=0;i<a,length;i++) sum += a[i];
     return sum;
   }
比如说

您的方法声明有两个参数:int数组和int

这里,您正在调用方法…使用两个int值

长话短说:当递归调用方法时,您必须准确地提供所需的参数;在您的情况下:您可能只需要使用
(a,2*i)
进行调用

编辑:

或者,您必须执行以下操作:

int x = minDepthBT(a[2*i],(2*i));

如前所述-核心问题是:您必须传递一个数组作为第一个参数。单个int不能工作!

正如您的IDE所注意到的:中的方法minDepthBT(int[],int)不适用于参数(int,int)。换句话说,当它是数组的一个元素时,您试图传递一些int值作为数组

int arrayForRecursiveCall[] = new int[whatever length];
... then you put some values in that array and then
minDepthBT(arrayForRecursiveCall, 2*i);

请:不要对变量使用单字符名称(如果有的话:作为循环中的计数器)。你在键入时节省的1秒钟…你后来问自己“那东西应该意味着什么”(好吧,你在键入时节省1秒钟,但你会花数分钟思考,这是肯定的!)因为这是[2*i]将解析为int而不是ArrayTank:)@GhostCat.和提示2:不要将错误消息作为链接。错误消息包含文本,此文本…您可以复制到此处。认真地说:您先阅读该文本。因为它通常会准确地告诉您在程序中犯了什么错误!@Pavneethingh但为什么会发生这种情况?请回答:)。我知道递归调用需要一个数组表示某个位置的地址。我想传递[2*I]的地址。我仍然不知道该怎么做?
int arrayForRecursiveCall[] = new int[whatever length];
... then you put some values in that array and then
minDepthBT(arrayForRecursiveCall, 2*i);
int[] array = new int[10];
//array - this is how we pass array as argument
//array[1] - this how we pass array's element as argument

minDepthBT(array[1], someInteger); // this is what you are doing
minDepthBT(array, someInteger);    // this is what you should do