【发布时间】:2016-08-30 17:22:11
【问题描述】:
计算下面一个数的阶乘的简单代码sn-p:
public class Main{
static int factorial(int number){
System.out.println("At factorial("+number+")");
if (number == 1){
return 1;
}
return number * factorial(number-1);
}
public static void main(String[] args){
System.out.println("factorial(4) = "+ factorial(4));
}
}
在这里,我认为当数字的值变为1时(由于递归),它每次都返回1并跳出方法并打印1。但是,它确实返回了正确的阶乘值吗? 按照这个:Java - Does returning a value break a loop?,它不应该每次都返回 1 吗?这两个代码 sn-p 在返回值方面有何不同?
谢谢
【问题讨论】:
-
返回到调用方法的时间。在纸上画出方法
-
你应该了解调用堆栈。
-
运行程序。如果您想查看您返回的值,请为此添加一条日志语句。
int result = number * factorial(number-1); System.out.println("At factorial("+number+") = " + result); return result;也,int会很快溢出阶乘。 -
@Narasimhan 我已经解释过了,请通过
标签: java