首页 新闻 会员 周边 捐助

关于递归边界条件返回值的疑问?

0
悬赏园豆:10 [已解决问题] 解决于 2015-05-22 09:59

如下图,为什么跳出循环的时候是return 1,但是打印出来的结果却是1+2+3之和6,这个return 1是什么意思?

我将一人成团的主页 我将一人成团 | 初学一级 | 园豆:196
提问于:2015-05-21 16:21
< >
分享
最佳答案
0

b.sum(3)=3+b.sum(2)=3+2+b.sum(1)=3+2+1

 

好奇的问一下,JAVA没有单步调试功能?

收获园豆:5
爱编程的大叔 | 高人七级 |园豆:30844 | 2015-05-21 16:30

有的,我只是想不通为什么要return 1

我将一人成团 | 园豆:196 (初学一级) | 2015-05-21 18:48

@极品小涩狼: 知道为什么了,if(i == 1)只是边界条件表示结束循环,最终其实是return rs而不是return 1;

我将一人成团 | 园豆:196 (初学一级) | 2015-05-22 10:13
其他回答(2)
1

sum(3)->[i==1不满足]->return sum(2)+3

sum(2)->[i==1不满足]->sum(1)+2

sum(1)->1

带入后 1+2+3=6

收获园豆:5
xmodygetz | 园豆:575 (小虾三级) | 2015-05-21 16:32

 我知道递归的流程,只是不懂为什么是return 1的写法

支持(0) 反对(0) 我将一人成团 | 园豆:196 (初学一级) | 2015-05-22 09:54

@极品小涩狼: 这段程序的意思大致就是设定sum(1)结果为1,如果得到的是其余的参数sum(x)=sum(x-1)+1;

拜托,我不知道还能怎么解释。

结束条件就是一个已知的函数解,递归就是利用已知解推导出未知解。

支持(1) 反对(0) xmodygetz | 园豆:575 (小虾三级) | 2015-05-22 10:03

@xmodygetz: 明白了,这个函数看上去是return 1,其实是return rs。

支持(0) 反对(0) 我将一人成团 | 园豆:196 (初学一级) | 2015-05-22 10:13

 解释的很明白,多谢,你这个才是最佳答案~

支持(0) 反对(0) 我将一人成团 | 园豆:196 (初学一级) | 2015-05-22 10:20
-1

首先你要明白这个方法实现的是 1 + 2 + 3 + ... + N (N 为自然数),那么我们假设 N 等于 1,根据规则 sum(1) 应该等于 1,现在请将 return 1 修改为非 1 的任何自然数,运行代码,你得到几了?正确吗?

其次,这个代码写错了,有大大的 BUG;

最后,我们都是用 N * (N + 1) / 2 来算的。

Launcher | 园豆:45050 (高人七级) | 2015-05-21 17:33

 代码没错,即使根据你的公式来比较两者的计算结果也是一样的(用了个四位数),我就想知道为什么是return 1这样的写法?

支持(0) 反对(0) 我将一人成团 | 园豆:196 (初学一级) | 2015-05-21 19:06

@极品小涩狼:怎么跟你们这些人沟通咋就这么困难呢?我给你回答的第一段话你究竟有没有去测试过?

首先你要明白这个方法实现的是 1 + 2 + 3 + ... + N (N 为自然数),那么我们假设 N 等于 1,根据规则 sum(1) 应该等于 1,现在请将 return 1 修改为非 1 的任何自然数,运行代码,你得到几了?正确吗

 

因为你连我写的第一段话都理解不了,所以你更不可能看出你这段代码的 BUG

 

支持(0) 反对(0) Launcher | 园豆:45050 (高人七级) | 2015-05-22 09:21

@Launcher: 你连我的问题都没搞清楚,答非所问。

支持(0) 反对(0) 我将一人成团 | 园豆:196 (初学一级) | 2015-05-22 09:53

@Launcher: 另外,改成非1的自然数我早就试过了

支持(0) 反对(0) 我将一人成团 | 园豆:196 (初学一级) | 2015-05-22 09:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册