我试着写一个递归方法,它接受一个int数组,数组中元素的数量,和一个整数,并返回整数是否作为数组中的一个元素出现。我只是不明白为什么我这对我所有的测试用例都不起作用。任何帮助都将不胜感激!
public static boolean search(int[] findIn, int target, int len){
if(len == 0){
return false;
}else if(findIn[len-1] == target){
return true;
}else{
return search(findIn, target, len-1);
}
}
是的,我知道有比递归更好的方法来做这件事,但是我必须这样做。
我的主方法如下所示:我只是暂时硬编码一下
int[] arr = {1};
System.out.println(search(arr,1,1));
测试用例:x1c 0d1x
4条答案
按热度按时间zf2sa74q1#
我几乎可以肯定,您的方法参数顺序不对:
您的结果提示您交换了第二个和第三个参数!
也许这个
应该是
mrwjdhj32#
从我所看到的,代码应该工作正常,所以我怀疑你的问题出在你的测试用例,而不是这里。
我要提到的一件事是,使用
if-return-else
构造往往会不必要地使代码复杂化。通常最好避免这种情况,比如:
我发现这比试图跟踪我在任何给定时刻碰巧处于哪个
if
子句要容易得多。无论如何,它和你的版本都表现良好,至少在小的测试用例中是这样,当你第一次传入一个1000万元素的数组时,你可能会发现它并不是递归的“最佳”典范。
mtb9vblg3#
我尝试了类似的方法,它很有效。我使用一个静态示例变量来查找number在数组中的位置。您可以修改返回一个布尔值来代替返回number的位置
o7jaxewo4#