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
每当n%10 == 7时,Count就会分配1。但是基本情况也会返回1。请解释这种情况,因为这是我无法正确理解的唯一内容。
最佳答案
您正在玩三个返回语句
if (n < 10 && n==7) return 1;
if (n < 10 && n!=7) return 0;
else return count7(n/10) + count;
仅第三个变量(递归的情况)完全使用
count
变量。当您执行count7(7)
时,将立即触发基本情况,而无需关心count
等于什么,将返回1,因为使用的是第一个return语句而不是第三个return语句,我想这就是您所期望的。