java递归,问题。请问这2个方法什么意思,我怎么就不明白递归的原理,求过程

如题所述

递归调用就是依次改变参数值,重复调用自身,当满足某个条件的时候开始逐层返回,直到最后返回结果。
递归调用在解决很多项的 有规律的数值的加减乘除法是很好的一种方法,因为它的代码量很小,然后能实现比较复杂的计算,被很多人所喜欢。
你的程序里面的:
public static int getSum(int n){
if(n==1) return 1;

return n + getSum(n-1);

}
这一段程序就是一个递归调用的程序,其功能是实现从1到n的连加运算。其计算过程是:
假如主函数里调用getSum时的参数为50,(计算1到50的连加)
第一次:50 与 getSum(49)的结果之和作为返回值;
然后先计算getSum(49),其计算过程是:49加 getSum(48)的结果作为返回值,
依次往下推,直到getSum(2)的时候,里面返回2+getSum(1);
而getSum(1)的时候直接返回1;
然后程序开始逐层返回,最后结果就是:50+49+48+...+3+2+1;追问

能给我解释下,我代码里面的 那里面n==1 return 1是什么意思

追答

这个是终止条件,就是说你的n的值肯定是要从一个较大的数开始逐渐往下走的,当n的值走到1就说明已经走到最后了,不要往下走了,可以开始返回了。

追问

那我下面那段代码写着n==2 结果怎么和上面的一样的呢

追答

你在AAA里面写这个对递归调用又没有任何影响。
你在下面写1和2的区别在于,你在main里面调用的时候,如果你的参数是1则给你返回1,你的参数是2则返回2,如果参数不是1和2,那就会执行下面的temp = getSum(sum-1)的程序,而且你会从sum-1开始往下递归,一直到1的时候返回。

追问

4+(4-1)+(3-1)+(2-1)+(1-1)?这样理解对吗?

追答

你可以这样理解:
4+(4-1 + (4-2+(4-3)))
先计算最里面的,然后再计算外面的。

追问

哦哦,就是 那里面n==1 return 1不太懂,不能写大于0吗

追答

如果你写n>0,那你只能得到结果为1的值,因为你的参数只要是大于0的,就直接返回1,后面的程序都不会执行了。当然,如果你不解,你也可以改成大于0,然后自己跑一下程序看看结果就知道了。

追问

我试了下 那个条件里面写 n==1 & n<=1 输出都正常哦 为何n<=1 可以的呢

追答

这个是条件的判断啊。

要两个条件都满足的话,当n等于1的时候不是正好两个条件都满足了吗??满足这个条件之后,就不用继续往下执行了,当然结果都正常的啦。

追问

哦哦,我一直把他当成条件语句判断了😏

追答

是个条件啊,是程序终止的条件的嘛,只是程序到这里肯定得终止,要是没有终止程序的方法,那就要死循环了。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-05-04
很简单呀。getSum(n) 返回的是 n+n-1+n-2+...+1;
AAA(sum) 这个就是一个简单方法,没有递归。追问

那里面n==1 return 1是什么意思

追答

就是递归的退出条件。
比如数学中的 函数是这样表述的
{ 1 n=1;
f(n)={
{ f(n-1)+n n>1

第2个回答  2015-05-04
1
相似回答