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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 骄傲的倔强 中级黑马   /  2014-1-9 10:44  /  769 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

   代码如下:
  1. public class StringBufferDemo{
  2.         public static void main(String args[]) throws Exception{
  3.                 System.out.print("结果是:" + sum(100));
  4.         }
  5.     public static int sum(int x){
  6.          if(x==1){
  7.                  return 1;
  8.          }else{
  9.                  return x + sum(x-1);
  10.                  }
  11.            
  12.             }       
  13.     }
复制代码
这是采用递归计算100+99+98+97+。。。+1的总和。
但是我有一点不理解,sum=100的时候,x的值是101,就是说从101开始加,加到sum(1),此时x的值是2,从101加到2,那么sum(0)呢,此时x的值是1,为什么不加了。  我理解的结果应该是1+2+3+。。+101.   谁告诉我为什么不加num = 1的情况。


6 个回复

倒序浏览
哥们  你这完全是蒙了啊。。。好好看一下  
其实第一次num(x) x= 100 啊  怎么能是101呢?
第二次num(x -1 ) x = 100 -1 x =99 对不对  以此类推
第一次 x = 100 ; x+ num(x - 1) 就是  100 + num(99)  这时候num(x)里面是怎么运算的呢?
重新回到num函数  这时x = 99 ;num函数中  x + num(x - 1)就变成了 99 + num(98)
所以递归就变成了  100 + 99 + num(99 - 1) 是把
等一直到 X = 1的时候 num里面如果不返回1的话 就变成了  x + num(x - 1) 也就是  1 + num(1 - 1) 就多加了一个0  虽然结果没变  但是如果接着往下走就变成负数了
这时候就return  1;退出递归   
如果不理解可以再问我哈
另外求技术分!!!!
回复 使用道具 举报 1 0
范二青年 发表于 2014-1-9 11:33
哥们  你这完全是蒙了啊。。。好好看一下  
其实第一次num(x) x= 100 啊  怎么能是101呢?
第二次num(x -1 ) ...

sun(100)的时候,也就是x-1=100;x不就是101吗?
回复 使用道具 举报
骄傲的倔强 发表于 2014-1-9 11:45
sun(100)的时候,也就是x-1=100;x不就是101吗?

X 就是100   为什么 x-1 才等于100呢?你为什么先减1! 哪里减的?

评分

参与人数 1技术分 +2 收起 理由
王维波老师 + 2 很给力!

查看全部评分

回复 使用道具 举报
return x + sum(x-1); 结果是return 100+99
不是什么101
可能你理解错了
注意:
(1) 递归就是在过程或函数里调用自身;
(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
return x + sum(x-1);
实现下一步递归,直到为1
不满足就结束递归
回复 使用道具 举报
范二青年 发表于 2014-1-9 11:56
X 就是100   为什么 x-1 才等于100呢?你为什么先减1! 哪里减的?

我刚仔细又想了想,现在想通了,是先有x的值,才有sum(x-1)的值的,这样就全部理解了,谢谢了。
回复 使用道具 举报
当sum(0),x==1;执行的是if中的语句所以不加了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马