java递归调用问题
publicclassTest{publicstaticvoidmain(Stringarg[]){System.out.println(Method(5));}publ...
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 展开
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 展开
3个回答
展开全部
当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,但是如果你要算高精密的数字还是用从大到小的顺序~
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,但是如果你要算高精密的数字还是用从大到小的顺序~
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
递归的思想是把问题分解,直到问题足够小,能够直接解决。
可以这样设计递归函数:
假设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的阶乘。
可以这样设计递归函数:
假设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的阶乘。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询