Java递归,返回数组索引
在Java中,我想创建一个递归方法,在数组中查找特定的整数,当找到它时,返回数组索引 到目前为止,我的代码是:Java递归,返回数组索引,java,recursion,Java,Recursion,在Java中,我想创建一个递归方法,在数组中查找特定的整数,当找到它时,返回数组索引 到目前为止,我的代码是: private static int contains(int[] data, int value, int index) { if (index >data.length) { return 0; } if(data[index] == value) { return index;
private static int contains(int[] data, int value, int index)
{
if (index >data.length)
{
return 0;
}
if(data[index] == value)
{
return index;
}
else
{
return contains(data,value,index);
}
}
该方法没有返回正确的索引。我做错了什么?首先,
0
是一个有效的索引,数组中的第一个索引。如果您在基本情况下离开了数组的末尾,请返回-1
,以指示“未找到”。另外,当索引
到达data.length
时,而不是当它传递data.length
时,您已经离开了数组的末尾,因此您需要在此处更改if
条件
其次,递归调用发送相同的参数,如果在初始递归调用中找不到
值
,将导致无限循环。您希望在下一次递归调用中查看下一个索引,因此在再次调用contains
时传递index+1
而不是index
。好吧,当您想要执行递归方法时,需要两件事:
index==data.length
和index==value
时)索引
好吧,有了这些,你必须想:
private static int contains(int[] data, int value, int index){
if(index == data.length) {
return -1;
}else if (data[index] == value){
return index;
}else{
return contains(data,value,index+1);
}
}
在递归中,您将问题划分为更小的类似问题,直到达到方法/函数不能或不需要再调用自身的点为止。在下面给出的我的包含的版本中,每次调用该方法时,它都会检查它是否超过数组的末尾(“在”第一个元素之前),或者是否找到了值的出现。如果不是,则该方法调用自身以查找结果。如果找不到元素,该方法将返回-1——这是一个合适的选择,因为索引-1处没有数组元素。此外,调用该方法时,应将数据-1的长度作为第三个参数
private static int contains( int[] data, int value, int index )
{
/* Base cases - end of recursion: */
if ( ( index == -1 ) || ( data[ index ] == value ) )
{
return index;
}
/* Recursion: */
return contains( data, value, index - 1 );
}