为什么这个函数返回在Java中没有返回预期的结果?
下面是一个接受int并返回int的函数。在函数中,我调用函数本身,如果I==1,我想退出函数
基本上,我试图以递归的方式计算阶乘
代码片段
static int factorial(int i){
result = result * i;
if(i==1){
return 0;
}
factorial(i-1);
return 1;
}
注意-结果是一个全局整型变量,初始化为1
为什么此函数返回1而不是0。 [注意,当i==1时,使用return语句,指针应该从函数中出来]
请不要发布更好的阶乘算法,我正在寻找-为什么这段代码的行为有点不同
# 1 楼答案
因为你没有返回0。函数将始终返回1,这是第一次调用的返回值。所有其他递归函数调用都在进行中,但父函数不用于返回。例如,如果调用factorial(5),那么所有重复调用(从4到1)都将执行并处理“result”变量,但您将只得到factorial(5)的返回值,该值始终为1
# 2 楼答案
调用
factorial(3)
的示例:factorial(3)
返回1递归被return 0
终止,但该值未被使用如果最后两行连接到
return factorial(i-1);
,则返回零只有
factorial(1)
将返回0,例如int i = factorial(1)
# 3 楼答案
您的代码甚至没有编译,因为
result
没有定义然后,方法可以返回
0
或1
,与您编写的return
无关,因此您不能期望得到实际值然后是实数算法
0
或1
,返回1
factorial(previous)
# 4 楼答案
您的代码的根本问题是,它对如何返回数据感到困惑
您有一个
result
全局变量,它应该是这个函数如何“传递”答案的,但是它也有一个返回值。它们听起来很不一样(一个是变量,一个是语言结构),但它们在这里用于相同的目的。一半时间返回,一半时间设置result
,这会导致代码产生您正在观察的效果解决办法是选择一方。或者只使用语句
result
-更新该方法,使其具有void
返回值,并且不要使用return x;
语句(仅return;
)。或者,完全摆脱result
,并使用return
进行通信将这一行与下一行进行比较:
这一行调用
factorial
函数并抛出它返回的任何内容,因为您不在任何地方分配它。这就是为什么您无法观察到返回的0:因为您忽略了它在我看来,您似乎认为
return 0;
以某种方式设置了result
,或者result
持有“函数返回的任何内容”,但这不是真的。它们是不同的东西