gpt4 book ai didi

java - 带局部变量的递归函数不执行 if 语句

转载 作者:行者123 更新时间:2023-12-01 18:13:50 26 4
gpt4 key购买 nike

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?

例如:

计数7(717)

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

每当 n % 10 == 7 时,Count 就被分配为 1。但基本情况也返回 1。请解释这一情况,因为这是我唯一无法正确理解的情况。

最佳答案

您正在使用三个 return 语句

if (n < 10 && n==7) return 1;
if (n < 10 && n!=7) return 0;
else return count7(n/10) + count;

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

关于java - 带局部变量的递归函数不执行 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30944020/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com