java递归调用问题

public class Test {
public static void main(String arg[]){
System.out.println(Method(5));
}
public static int Method(int n){
if(n==1)
return 1;
else
return n*Method(n-1);
}
}
这个是算5的阶乘的 但我不能白她是怎么循环的 那位高手给小弟指点指点
我不明白为啥最好是5*4*3*2*1

这个调用就是你传的参数在自减,然后到了等于1的时候就开始返回了。所以你的参数自减几次为1就循环几次
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-01-05
当n=1时返回指为1,当n=5时,返回什么呢?
5*Method(5-1),Method(5-1)又等于什么呢?
=(5-1)*Method(5-1-1)以此类推进行递归,知道Method()括号里面的变量为1就给出结果,但是此方法递归只能算到12!这是因为递归需要很大的memory而且int型也支持不了大整数的运算。
5*4*3*2*1不就是按照阶乘运算法来算的吗,当然如果你想也可以用递减的方法算1*2*3*4*5,但是如果你要算高精密的数字还是用从大到小的顺序~本回答被提问者采纳
第2个回答  2009-08-27
递归的思想是把问题分解,直到问题足够小,能够直接解决。
可以这样设计递归函数:
假设Method(n)函数的功能是计算n的阶乘。
那么现在来设计Method的实现。
首先如果参数等于1,则可以直接返回1的阶乘,即1。
如果n不等于1,那么,既然已经假设Method能计算n的阶乘,则我们可以Method先计算n-1的阶乘,然后哦乘以n级为答案。于是就得出了搂主的那个函数。
对于“假设Method(n)函数的功能是计算n的阶乘”这点,是基于Method确实能计算1的阶乘,而n的阶乘又能转换成计算n-1的阶乘乘以n,即能不断的将问题分解,直到问题规模小到我们能处理。这里指计算1的阶乘。
相似回答