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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马潘浩 中级黑马   /  2013-3-10 23:34  /  1798 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马潘浩 于 2013-3-10 23:58 编辑

  1. class Demo {
  2. public static int b(int m){
  3.             if(1>m){
  4.                 return 0;
  5.             }else{
  6.                 return m---b(m);
  7.             }
  8.         }        
  9.    
  10.   public static void main(String[] args) {
  11.     int t=b(10);
  12.     System.out.println(t);
  13. }
  14. }
复制代码
为什么运行结果是5,求运算逻辑?

点评

请用代码模式列代码,并且给没有语法错误的代码。这样就可以涨技术分了  发表于 2013-3-10 23:50

6 个回复

倒序浏览
———是神马玩意啊
回复 使用道具 举报
语言解释显得苍白无力。。。。有图有真相。。。
真正想知道过程的,下载下附件看看我的个人见解吧。。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 施家雄 于 2013-3-11 00:41 编辑

m---b(m);——>(m--)-b(m)。  这是一个递归算法。首先m=10,m>1 执行else语句。t=10-b(9)接下来循环,t=10-(9-b(8)).........也就是10-(9-(8-(7-(6-(5-(4-(3-(2-(1-b(0))))))))))。b(0)中0<1,返回0所以b(0)=0;所以最后结果为t=5。
回复 使用道具 举报
你知道自己用的递归吧   10进去  开始计算 10-(9-(8-(7-(6-(5-(4-(3-(2-(1-0)))))))))    你得出结果就是5   
回复 使用道具 举报
本帖最后由 沈文杰 于 2013-3-11 07:12 编辑
  1. public class DiGui {
  2.         public static int b(int m){
  3.         if(1>m){
  4.             return 0;
  5.         }else{
  6.             //先要弄清这句话什么意思,其实就是return(m--)-b(m);
  7.                 return m---b(m);   
  8.                 //为了规范和便于阅读,建议使用return(m--)-b(m);
  9.         }
  10.          }        
  11.             
  12.           public static void main(String[] args) {
  13.                   /*
  14.                    * 下列代码用于测试
  15.                           int j =3;
  16.                           System.out.println(j--);//3-->(j--)=自减前的j
  17.                            System.out.println(j);//2-->j=自减后的j
  18.                   */
  19.             int t=b(10);
  20.             System.out.println(t);
  21.         }
  22.         
  23. }
  24. /*
  25.          m           t            if(else)              return                  t=?     
  26.          10        b(10)         else               10-b(9)               10-b(9)        
  27.          9                           else                9-b(8)                10-(9-b(8))        
  28.          8                           else                8-b(7)                10-(9-(8-b(7)))        
  29.          7                           else                7-b(6)                10-(9-(8-(7-b(6))))
  30.          6                           else                6-b(5)                 ...
  31.          5                           else                5-b(4)                 ...
  32.          4                           else                4-b(3)                 ...        
  33.          3                           else                3-b(2)                 ...        
  34.          2                           else                2-b(1)                 ...        
  35.          1                           else                1-b(0)                10-(9-(8-(7-(6-(5-(4-(3-(2-b(1)))))))))
  36.          0                             if                   0                       10-(9-(8-(7-(6-(5-(4-(3-(2-1-(0)))))))))
  37.          t = 10-9+8-7+6-5+4-3+2-1
  38.            = (10-9)+(8-7)+(6-5)+(4-3)+(2-1)
  39.            = 1*5
  40.            = 5
  41.          
  42.          
  43.          
  44.          
  45. */
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

回复 使用道具 举报

代码写得大众化点就能知道怎么回事了

  1.        public static int b(int m){
  2.             if(1>m){
  3.                 return 0;
  4.             }else{
  5.                         m--;
  6.             return  m-b(m);
  7.             }
  8.         }        
  9.    
  10.   public static void main(String[] args) {
  11.     System.out.println(b(10));
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马