如下图,为什么跳出循环的时候是return 1,但是打印出来的结果却是1+2+3之和6,这个return 1是什么意思?
b.sum(3)=3+b.sum(2)=3+2+b.sum(1)=3+2+1
好奇的问一下,JAVA没有单步调试功能?
有的,我只是想不通为什么要return 1
@极品小涩狼: 知道为什么了,if(i == 1)只是边界条件表示结束循环,最终其实是return rs而不是return 1;
sum(3)->[i==1不满足]->return sum(2)+3
sum(2)->[i==1不满足]->sum(1)+2
sum(1)->1
带入后 1+2+3=6
我知道递归的流程,只是不懂为什么是return 1的写法
@极品小涩狼: 这段程序的意思大致就是设定sum(1)结果为1,如果得到的是其余的参数sum(x)=sum(x-1)+1;
拜托,我不知道还能怎么解释。
结束条件就是一个已知的函数解,递归就是利用已知解推导出未知解。
@xmodygetz: 明白了,这个函数看上去是return 1,其实是return rs。
解释的很明白,多谢,你这个才是最佳答案~
首先你要明白这个方法实现的是 1 + 2 + 3 + ... + N (N 为自然数),那么我们假设 N 等于 1,根据规则 sum(1) 应该等于 1,现在请将 return 1 修改为非 1 的任何自然数,运行代码,你得到几了?正确吗?
其次,这个代码写错了,有大大的 BUG;
最后,我们都是用 N * (N + 1) / 2 来算的。
代码没错,即使根据你的公式来比较两者的计算结果也是一样的(用了个四位数),我就想知道为什么是return 1这样的写法?
@极品小涩狼:怎么跟你们这些人沟通咋就这么困难呢?我给你回答的第一段话你究竟有没有去测试过?
首先你要明白这个方法实现的是 1 + 2 + 3 + ... + N (N 为自然数),那么我们假设 N 等于 1,根据规则 sum(1) 应该等于 1,现在请将 return 1 修改为非 1 的任何自然数,运行代码,你得到几了?正确吗?
因为你连我写的第一段话都理解不了,所以你更不可能看出你这段代码的 BUG。
@Launcher: 你连我的问题都没搞清楚,答非所问。
@Launcher: 另外,改成非1的自然数我早就试过了