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语句,我想这就是您所期望的。

09-05 12:11
查看更多