public int count7(int n)
{
int count = 0;
if (n%10 == 7) count= 1;
if(n%10 != 7) count= 0;
if (n < 10 && n==7) return 1;
if (n < 10 && n!=7) return 0;
else return count7(n/10) + count;
}
我有上述函数递归地添加7在给定数字中的出现次数。每次它将数字除以10以减少1个数字并检查最后一个数字是否等于7.递归函数与本地变量不执行,如果语句
当我将它作为count7(7)运行时,它返回1.我有一个问题,它为什么从未命中第一if语句(if n%10 == 7) count = 1;
如果我的计划是写为:
public int count7(int n)
{
int count = 0;
if (n%10 == 7) count= 0;
if(n%10 != 7) count= 0;
if (n < 10 && n==7) return 1;
if (n < 10 && n!=7) return 0;
else return count7(n/10) + count;
}
呼叫count7(7)仍能正常工作。我的问题是,当递归调用放在堆栈上时,为什么最后一次调用没有将count赋值为1,而是将其赋值为0?
例如:
Count7(717)
Count7(7) + count <-------This hits the base case since n < 10
Count(71) + count
Count(717) + count
计数被分配1每当ñ%10 == 7.但碱情况下,也将返回1,因为它是请解释此一例只有我无法正确理解的事情。
另外“if(n <10 && n == 7)”是多余的。 – DJClayworth
逐行扫描代码。在你走的时候,把每个变量的值写在一张纸上(记住跟踪所有不同的'count'实例)。 – DJClayworth
你的第二个代码是否适用于count(717)? – lmcphers