黑马程序员技术交流社区

标题: 这段代码中n--和n-1的区别是什么啊 [打印本页]

作者: 王睿    时间: 2012-2-26 00:06
标题: 这段代码中n--和n-1的区别是什么啊
本帖最后由 王睿 于 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--?

该贴已经同步到 王睿的微博
作者: H07000223    时间: 2012-2-26 00:23
本帖最后由 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. }
复制代码

作者: 李晓俊老师    时间: 2012-2-26 00:31
很简单啊,n-1和n--明显不等同啊,一个是先减去1在参与运算,另外一个是先参与运算再减1
你把n--换成--n就行了,,,兄弟大意啊
作者: 许圣建    时间: 2012-2-26 02:06
具体代码且不说了,n--和n-1之间区别简直是天地之别了:
n=n-1和(n-1)能一样才怪了不是,一个改变了n的值,一个只是将(n-i)的结果传递给某个参数,甚至都不传递出去,只是运算一下,
如果要循环的话,前者会递归(不知道这个词用的对不,刚学到),后者始终不变化。
作者: 朱皓    时间: 2012-2-26 08:33
n--是先参与运算,后自减的啊,如果是n++ 那就是先参与运算,后自增的 啊
如果还不明白,想一想我们平时经常用到的for循环吧
for(int i=0;i<10;i++)
作者: 泮和顺    时间: 2012-2-26 08:47
这个循环调用函数还不如用for还做 呵呵
作者: 王--明    时间: 2012-2-26 09:24
你说这是递归里出现的小问题,n-1是先减去1在参与运算,n--是先参与运算再减1
至于为什么不能替换,你想啊,如果替换了,运行是没问题的。可结果可就大不一样了。
作者: 微博评论    时间: 2012-2-26 20:57
大哥,你介是发的嘛呀?[吃惊]

来自 锐睿forever 的新浪微博




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2