我正在尝试学习有关递归的知识,所以我尝试进行一些练习,但是现在我有点卡住了,因为我不知道为什么该函数总是返回1或0 我正在尝试计算int数组中出现的次数11。
public class Uloha06 {
public static int count = 0;
public static int array11(int[] nums, int index){
if(index<nums.length){
if(nums[index]==11)
count+=1;
index++;
array11(nums,index);
if(index<nums.length)
return index;
}
return count;
}
public static void main(String[] args) {
int array11[]={11,1,2,36,11};
System.out.println(array11(array11, 0));
}
}
答案 0 :(得分:0)
您返回索引。标记您的问题:
public class Uloha06 {
public static int count = 0;
public static int array11(int[] nums, int index){
if(index<nums.length){
if(nums[index]==11)
count+=1;
index++;
array11(nums,index);
/// booom here index is 1 but you want count
//if(index<nums.length)
// return index;
}
return count;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int array11[]={11,1,2,36,11};
System.out.println(array11(array11, 0));
}
答案 1 :(得分:0)
对于空数组,它返回0
,对于非空数组,它返回1
。您看到的结果来自index
,而不是您期望的count
。
我会在不涉及任何字段的情况下编写它。
public int m(int[] nums, int index, int count) {
return index < nums.length ?
m(nums, index + 1, nums[index] == 11 ? ++count : count) :
count;
}
或(在评论中由@Pshemo建议)
public int m(int[] nums, int index) {
return index < nums.length ?
(nums[index] == 11 ? 1 : 0) + m(nums, ++index) :
0;
}
答案 2 :(得分:0)
这应该有效
public static int array11(int[] nums, int index){
if(index < 0){
return 0;}
else if (nums [index] == 11)
{
return (array11(nums, index-1) + 1);
}
else {
return array11(nums, index-1);
}
}