我想了解一些有关递归所以我试着做一些练习,但现在我有点stucked因为我想不通,为什么这个函数总是返回我1或0我试着去数数在int数组的11 appearences。
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
为空数组,并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;
}
您将返回索引。标记您的问题:
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));
}
这应该工作
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);
}
}