Java 局部变量不执行if语句的递归函数

Java 局部变量不执行if语句的递归函数,java,recursion,Java,Recursion,呼叫计数7(7)仍然有效。我的问题是,由于递归调用放在堆栈上,为什么最后一个调用不将count赋值为1,而是将其赋值为0 例如: Count7(717) Count7(7)+count我的问题是,由于递归调用放在堆栈上,为什么最后一个调用不将count分配为1,而将其分配为0? count是一个局部变量,为堆栈中的每个调用设置不同的值。当n=7时,if(n

呼叫计数7(7)仍然有效。我的问题是,由于递归调用放在堆栈上,为什么最后一个调用不将count赋值为1,而是将其赋值为0

例如:

Count7(717)


Count7(7)+count我的问题是,由于递归调用放在堆栈上,为什么最后一个调用不将count分配为1,而将其分配为0?

count
是一个局部变量,为堆栈中的每个调用设置不同的值。当
n=7
时,
if(n<10&&n==7)返回1被执行,因此返回1

这就是为什么在基本情况下,
count
的值是多少并不重要,因为在返回中没有考虑
count
的值

如果您解除递归,它将变为

Count7(7) + count <-------This hits the base case since n < 10
Count(71) + count
Count(717) + count

我的问题是,由于递归调用放在堆栈上,为什么最后一个调用不将count分配为1,而是将其分配为0?

count
是一个局部变量,为堆栈中的每个调用设置不同的值。当
n=7
时,
if(n<10&&n==7)返回1被执行,因此返回1

这就是为什么在基本情况下,
count
的值是多少并不重要,因为在返回中没有考虑
count
的值

如果您解除递归,它将变为

Count7(7) + count <-------This hits the base case since n < 10
Count(71) + count
Count(717) + count

跟踪代码的执行情况。当您调用
count7(7)
时,它确实会触发您指出并设置
count=1
的if语句,但之后不会使用
count
的值。执行的下一条语句是
if(n<10&&n==7)return1
,它退出
return
语句上的方法。未使用count的值,因此所做的更改对方法的执行没有影响

跟踪代码的执行情况。当您调用
count7(7)
时,它确实会触发您指出并设置
count=1
的if语句,但之后不会使用
count
的值。执行的下一条语句是
if(n<10&&n==7)return1
,它退出
return
语句上的方法。未使用count的值,因此所做的更改对方法的执行没有影响

您有三个返回语句

count7( 717) =  count(71) +1 
                (count(7) + 0) + 1
                1 + 0 + 1
             --------------
                   2
if(n<10&&n==7)返回1;
如果(n<10&&n!=7)返回0;
否则返回计数7(n/10)+计数;

只有第三个(递归情况)使用
count
变量。当您执行
count7(7)
时,会立即触发基本大小写,返回1而不关心
count
等于什么,因为使用的是第一个返回语句而不是第三个返回语句,我想这是您所期望的。

您有三个返回语句在使用

count7( 717) =  count(71) +1 
                (count(7) + 0) + 1
                1 + 0 + 1
             --------------
                   2
if(n<10&&n==7)返回1;
如果(n<10&&n!=7)返回0;
否则返回计数7(n/10)+计数;

只有第三个(递归情况)使用
count
变量。当您执行
count7(7)
时,它会立即触发基本情况,返回1而不关心
count
等于什么,因为使用的是第一个return语句而不是第三个return语句,我想这是您所期望的。

作为旁白的“if(n<10&&n==7)”是多余的。逐行遍历代码。在运行过程中,将每个变量的值写在一张纸上(记住要跟踪;'count')的所有不同实例。您的第二个代码对count(717)有效吗?您的代码工作得非常好()。第二个代码对717不起作用。我只是想指出,如果我用count7(7)运行它,即使基本大小写返回0,它也能工作。作为旁白,“if(n<10&&n==7)”是多余的。逐行遍历代码。在运行过程中,将每个变量的值写在一张纸上(记住要跟踪;'count')的所有不同实例。您的第二个代码对count(717)有效吗?您的代码工作得非常好()。第二个代码对717不起作用。我只是想指出,如果我使用count7(7)运行它,它甚至可以使用基本大小写返回0。顺便说一句,如果在基本大小写返回中使用count的值,代码可以简化。非常感谢您的详细解释。我在一张纸上看了一遍代码,然后把它画了出来,找到了和你贴的一样的东西。这很有帮助!顺便说一句,如果在基本案例返回中使用count的值,代码可以简化。非常感谢您的详细解释。我在一张纸上看了一遍代码,然后把它画了出来,找到了和你贴的一样的东西。这很有帮助!知道了。第一个语句返回1,但不做任何计数操作,因为它从来没有得到到这一点。明白了。第一个语句返回1,但不使用count,因为它从来没有达到这个点。
if (n < 10 && n==7) return 1;
if (n < 10 && n!=7) return 0;
else return count7(n/10) + count;