Java 为什么此函数总是返回0或1
我试图学习一些关于递归的知识,所以我试着做一些练习,但现在我有点结巴,因为我不明白为什么这个函数总是返回1或0 我正在尝试计算int数组中11的出现次数Java 为什么此函数总是返回0或1,java,recursion,return,Java,Recursion,Return,我试图学习一些关于递归的知识,所以我试着做一些练习,但现在我有点结巴,因为我不明白为什么这个函数总是返回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) c
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));
}
}
公共类Uloha06{
公共静态整数计数=0;
公共静态int数组11(int[]nums,int索引){
如果(index返回索引。标记您的问题:
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));
}
公共类Uloha06{
公共静态整数计数=0;
公共静态int数组11(int[]nums,int索引){
if(index对于空数组,它返回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;
}
public int m(int[]nums,int索引,int计数){
返回索引
或(由@Pshemo在评论中建议)
public int m(int[]nums,int索引){
返回索引
这应该行得通
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);
}
}
公共静态int数组11(int[]nums,int索引){
如果(指数<0){
返回0;}
else if(nums[索引]==11)
{
返回(数组11(nums,索引-1)+1);
}
否则{
返回数组11(nums,索引-1);
}
}
递归调用的结果似乎没有做任何处理array11(nums,index);
-如果返回的计数为1,会发生什么?您应该将其添加到count变量中?Java使用pass by value,因此计数最多更新一次。如果(index@Pshemo哇,你刚刚解决了我的问题,返回count就足够了。我现在应该返回index:D,这看起来非常清楚。当我看到它时,我觉得自己真的很笨:D thx manBTW你应该避免在递归中使用字段(比如counter
)。例如,您可以使用与编写递归和相同的技术,它可能类似于返回currentElement+recursiceSumOfPreviousElements
。在这里,您的currentElement
将是1或0,这取决于当前索引的值是否为11。因此,您的递归可以类似于公共静态intt11(int[]nums,int index){if(index
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);
}
}