java 递归的疑惑?

public static int sum(int i, int result) { result=result+i; i++; if(i<=100) { sum(i, result); } return result; } public static void main(String[] arges) { int nsum=sum(0,0); System.out.println(nsum); }为什么if词句中调用自已前要加个接收。不加的话结果就为0在调用自已的时候i值到了100又会回到0

感觉你这个思路比较清奇,不是太符合递归的宗旨——问题规模越来越小,直到一个显而易见的能解决的地步,相反,越是递归你这规模越大,result和i都变大,另外一个值得商榷的地方是,问题的规模(100),不是参数化的,那么这个算法无法满足参数化调用,所以,你这个看起来是递归的形式,但没有领会递归的灵魂。

重新整理一下思路,函数原型:

int sum(int i),我不知道怎么算,但是我知道,它等于sum(i-1) + i,sum(i-1)我还是不知道怎么算,但是我知道,当它为0的时候我就能算了,显而易见,sum(0)应该等于0,代码如下:

注意这里问题规模是参数话的,也就是说其他函数调用你,可以传100,也可以传1000,还可以传其他值,不像你的,如果想算101,你要修改一下代码才可以,问题是我会像下面18行这样循环调用你:

    

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-08-28
希望能帮助到您!
此问题涉及到1、java的值传递 2、方法调用使用的是栈结构(先进后出)
1、在方法被调用时,实参通过形参把它的内容副本传入方法内部,此时形参接收到的内容是实参值的一个拷贝,因此在方法内对形参的任何操作,都仅仅是对这个副本的操作,不影响原始值的内容。
2、因为你第一次调用 sum方法时result就是0,他的值一直没有发生改变,所有最后返回的是0。
第2个回答  2020-08-27
你这是为了递归而递归
干嘛不举个其他例子,就像求阶乘或者斐波那契数列的,这样大家都熟悉
相似回答