我目前正在codingbat
网站上进行练习,其中说:
给定一个int数组,如果数组包含6,则递归计算。 我们将使用仅考虑数组部分的约定 从给定的索引开始。通过这种方式,递归调用可以通过 index + 1向下移动数组。初始调用将在索引中传递为 0
示例:
array6([1,6,4],0)→true
array6([1,4],0)→false
array6([6],0)→true
我的解决方案如下,但出于某种原因,当我的if(nums[index] == 6)
为真时,它仍会执行else block.
我的问题:
从技术上讲,当执行else block
中的代码时,它不应该在if statement
内执行代码。那为什么会持续下去?;
public static boolean array6(int[] nums, int index) {
if(nums.length == 0){
return false;
}
if(index == nums.length-1 && nums[index] != 6){
return false;
}
if(index == nums.length-1 && nums[index] == 6){
return true;
}
if(nums[index] == 6){
return true;
}else{
array6(nums,index+1);
}
return false;
}
答案 0 :(得分:4)
返回递归收到的值。改变
array6(nums,index+1);
类似
return array6(nums,index+1);
答案 1 :(得分:0)
left Join
答案 2 :(得分:0)
检查我的答案是否满足您的问题
public boolean array6(int[] nums, int index) {
if(nums.length == 0 || index > nums.length-1){
return false;
}
if(nums[index] == 6){
return true;
}
return array6(nums,index+1);
}