我对递归函数有疑问。
我制作了一个小例子程序来计算整数中的个别数字: 例如:123 = 6因为1 + 2 + 3 = 6。
现在我用静态int和这个递归函数创建了它:
static int totalNumbers(int a)
{
if(a <= 0)
return sum;
else
{
sum += a % 10;
return totalNumbers(a/10);
}
}
这个功能就像一个魅力,但我的问题是,我可以在没有名为sum的静态int的情况下制作吗? 有没有办法可以在函数中定义一个整数和,让它们用局部变量计算或者不可能?
亲切的问候,
答案 0 :(得分:6)
当然:
static int totalNumbers(int a)
{
if(a <= 0)
return 0;
else
{
return (a % 10) + totalNumbers(a/10);
}
}
答案 1 :(得分:4)
static int totalNumbers(int a)
{
return a < 10 ? a : (a % 10) + totalNumbers(a / 10);
}
答案 2 :(得分:2)
当然:
static int totalNumbers(int a, int sum)
{
if(a <= 0)
return sum;
else
{
return totalNumbers(a/10, sum + a % 10);
}
}
static int totalNumbers(int a) {
return totalNumbers(a, 0);
}
这个版本是尾递归的,但是它没有给你任何Java语言。
答案 3 :(得分:1)
当然可以!
public static int totalNumbers(int a) {
if (a == 0)
return 0;
return (a % 10) + totalNumbers(a / 10);
}
通过使用静态int属性,您缺少递归函数的点,在最纯粹的数学意义上的函数,不依赖于外部值,并且您可以确定每次你使用相同的输入调用它,它将返回相同的输出 - 你不能说你的方法,每次用相同的输入调用它时会产生不同的结果,除非你手动将外部静态int属性重置为零在电话之间。
例如,尝试连续两次或多次调用您的实现,如下所示:
System.out.println(totalNumbers(123));
System.out.println(totalNumbers(123));
System.out.println(totalNumbers(123));
明白我的意思?
答案 4 :(得分:1)
当然,没有静态“sum”变量更好。我会用这样的方式写它:
static int totalNumbers(int a) {
if (a <= 0) return 0;
return a%10 + totalNumbers(a/10);
}