A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王睿 中级黑马   /  2012-2-26 00:06  /  2820 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王睿 于 2012-2-27 16:23 编辑

  1. class Sum
  2. {
  3.         public static int getSum(int n)
  4.         {       
  5.                 if(n==1)
  6.                         return 1;
  7.                 else
  8.                 {
  9.                         return n+getSum(n-1);
  10.                 }
  11.         }
  12.         public static void main(String[] args)
  13.         {
  14.                 sop(getSum(10));
  15.         }
  16. }
复制代码
这里n-1为什么不能换成n--?

该贴已经同步到 王睿的微博

7 个回复

正序浏览
大哥,你介是发的嘛呀?[吃惊]

来自 锐睿forever 的新浪微博
回复 使用道具 举报
王--明 黑马帝 2012-2-26 09:24:44
7#
你说这是递归里出现的小问题,n-1是先减去1在参与运算,n--是先参与运算再减1
至于为什么不能替换,你想啊,如果替换了,运行是没问题的。可结果可就大不一样了。
回复 使用道具 举报
这个循环调用函数还不如用for还做 呵呵
回复 使用道具 举报
n--是先参与运算,后自减的啊,如果是n++ 那就是先参与运算,后自增的 啊
如果还不明白,想一想我们平时经常用到的for循环吧
for(int i=0;i<10;i++)
回复 使用道具 举报
具体代码且不说了,n--和n-1之间区别简直是天地之别了:
n=n-1和(n-1)能一样才怪了不是,一个改变了n的值,一个只是将(n-i)的结果传递给某个参数,甚至都不传递出去,只是运算一下,
如果要循环的话,前者会递归(不知道这个词用的对不,刚学到),后者始终不变化。
回复 使用道具 举报
很简单啊,n-1和n--明显不等同啊,一个是先减去1在参与运算,另外一个是先参与运算再减1
你把n--换成--n就行了,,,兄弟大意啊
回复 使用道具 举报
本帖最后由 H07000223 于 2012-2-26 00:25 编辑

可以的,我试了下,应该是n和n--出现了矛盾,
至于更深层次我也不太清楚,不过还是弄出来:
  1. public class Test_011
  2. {
  3.         public static int getSum(int n)
  4.         {
  5.                 if (n == 1)
  6.                         return 1;
  7.                 else
  8.                 {
  9.                         return n-- + getSum(n--);
  10.                 }
  11.         }

  12.         public static void main(String[] args)
  13.         {
  14.                 System.out.println(getSum(10));
  15.         }
  16. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马