【发布时间】:2022-01-21 01:47:03
【问题描述】:
我有一个数组,它只使用升序整数预先排序:
int[] intArray = new int[]{ 1,2,3,4,5,6,7,8,9 };
我希望我的程序在该数组中搜索一个整数,我将其称为“gesucht”,并返回数组中“gesucht”所在的位置。
我不能使用任何循环、包或类似 .find 方法的东西,必须使用递归
这是我的程序:
public static int optimierteSuche(int gesucht, int[] array, int startposition, int endposition){
if((0<=startposition && startposition<=endposition && endposition<=array.length) == false){
throw new IllegalArgumentException("wrong input");
}
int m = (endposition-startposition)/2;
if (gesucht == array[m]){
return m;
}
if (array[m]<gesucht){
optimierteSuche(gesucht, array, m+1, endposition);
} else {
optimierteSuche(gesucht, array,startposition, m-1);
}
}
当我在我的主要方法中使用以下内容时:
int[] intArray = new int[]{ 1,2,3,4,5,6,7,8,9 };
System.out.println(optimierteSuche(2,intArray,0,intArray.length));
我的编译器告诉我,我的方法缺少 return 语句,虽然它在那里,当我使用我的算法并自己计算步骤时它可以工作(或者至少我会说它可以)
我已经尝试过稍微调整一下,但也没有用:
public static int optimierteSuche(int gesucht, int[] array, int startposition, int endposition){
if((0<=startposition && startposition<=endposition && endposition<=array.length) == false){
throw new IllegalArgumentException("wrong input");
}
int m = (endposition-startposition)/2;
int ergebnis = 0;
if (gesucht == array[m]){
ergebnis = m;
}
if (array[m]<gesucht){
optimierteSuche(gesucht, array, m+1, endposition);
} else {
optimierteSuche(gesucht, array,startposition, m-1);
}
return ergebnis;
}
我因为兴趣而学习经济学并参加了一些编程课程,但因此与许多其他编程专业的联系并不多,并且希望得到一些帮助。谢谢!
【问题讨论】:
-
如果
gesucht == array[m]为假,则没有返回语句。 -
你需要从你的递归
optimierteSuche调用中返回值,即return optimierteSuche(...) -
多么愚蠢的错误!不过我现在明白了,谢谢!
标签: java arrays recursion return tail-recursion