Java 递归方法的麻烦
作为CSA类练习的一部分,我们必须编写一个方法,用于查找int数组中是否存在6,并返回相应的布尔值。如果数组中的第一个数字是6,那么我编写的方法可以工作,但如果不是6,则不能工作。为什么?Java 递归方法的麻烦,java,arrays,recursion,Java,Arrays,Recursion,作为CSA类练习的一部分,我们必须编写一个方法,用于查找int数组中是否存在6,并返回相应的布尔值。如果数组中的第一个数字是6,那么我编写的方法可以工作,但如果不是6,则不能工作。为什么? 注意:必须递归地执行问题是您没有触发递归,因为在代码中没有任何地方返回方法本身的结果。将在条件为true时执行的if语句的内容重写如下将使其按预期工作: public static boolean array6(int[] nums, int index) { if(nums.length >
注意:必须递归地执行问题是您没有触发递归,因为在代码中没有任何地方返回方法本身的结果。将在条件为
true
时执行的if语句
的内容重写如下将使其按预期工作:
public static boolean array6(int[] nums, int index) {
if(nums.length > index+1)
{
if(nums[index] == 6)
return true;
else
array6(nums,index+1);
}
else if(nums.length==index+1)
{
if(nums[index] == 6)
return true;
else
return false;
}
return false;
}
但总的来说,您的函数包含很多问题。您的任务非常简单,但您正在以极其复杂的方式对其进行编码。为了达到同样的效果,您可以使用很多内置函数。。。即使您不想使用它们,一个简单的for循环
也可以:
if (nums.length > index_next)
{
if (nums[index] == 6)
return true;
// you have to return the result of the function here
// in order to obtain an effective recursion, otherwise the
// method is called but it's output value is ignored and the
// functions goes outside the scope of the if statement
// reaching the "return false" located at the bottom
return array6(nums, index_next);
}
紧凑的解决方案
public static boolean array6(int[] nums, int index)
{
if (index == nums.length)
return false;
if (nums[index] == 6)
return true;
return array6(nums, index + 1);
}
忘了提到它必须递归完成mbI编辑了我的答案以提供递归实现:)
public static boolean array6(int[] nums, int index)
{
if (index == nums.length)
return false;
if (nums[index] == 6)
return true;
return array6(nums, index + 1);
}
bool array6(int* array, int len, int index) {
if (index == len) {
return false;
}
return array[index] == 6 || array6(array, len, index + 1);
}