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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 黄克帅 于 2012-5-20 21:00 编辑

public class UserTest {
public static void main(String[] args) {
  System.out.println(method(6));
   }
private static int method(int i) {
  if(i == 1||i==2) return 1;
  
  else
  return method(i-1)+method(i-2);
    }
}

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
本帖最后由 杨尧 于 2012-5-20 17:13 编辑

  1. public class UserTest {
  2. public static void main(String[] args) {
  3.   System.out.println(method(6));//调用method()方法参数是6
  4.    }
  5. //第一次调用下面的方法参数的6所以执行else  调用method(5)+ method(4)
  6. //接着还是els  调用method(4)+method(3) +method(3)+method(2)  
  7. //method(3)+method(2)+method(2)+method(1)  + method(2)+method(1) +1
  8. //method(2)+method(1)+1+1+1 +1+1+1
  9. //结果应该是8
  10. private static int method(int i) {
  11.   if(i == 1||i==2) return 1;
  12.   
  13.   else
  14.   return method(i-1)+method(i-2);
  15.     }
  16. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
结果是13  怎么可能是两个数嘛
回复 使用道具 举报
给method()传入了6运行method(6),运行else,即return method(5)+method(4);
也就是收method(6)运行后得到method(5)+method(4);
method(5)+method(4)运行后得到method(4)+method(3)和method(3)+method(2);
根据代码运行,当出现method(2)或者method(1)时,就得到1.
即method(5)+method(4)运行后得到method(4)+method(3)和method(3)+1;
再继续推下去,最后得到的结果是
method(2)+method(1)+method(2)+method(2)+method(1)+method(2)+method(1)+1=1+1+1+1+1+1+1+1=8;
本来想上个图给你分解下的,不过我画板出现了点小问题,一会好了 我给你上图。不知道我说的你能听懂不。

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
上面的看懂了  谢谢  答案也是对的  我前面回答答案是13 是测试的时候输错了
回复 使用道具 举报
分析:  首先是method(6),6传进去,不满足IF条件,执行else,返回return method(5)+method(4),接下来,因为method是递归方法,所以继续调用method本身,先是method(5)执行,返回 method(4)和method(3),接下来method(4)执行,返回method(3),method(2),接下来method(3)执行,返回method(2)和method(1);接下来method(2);执行返回1,接下来method(1)执行,返回1;接下来。。。。请看图,相信你一看就明白
该程序的执行顺序如图所示,跟二叉树的先根遍历的顺序是一样一样的。结果就为8个1相加得8

未命名.jpg (35.07 KB, 下载次数: 23)

未命名.jpg

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马