黑马程序员技术交流社区

标题: 递归问题 谁能详细说下执行过程[已解决] [打印本页]

作者: 黄克帅    时间: 2012-5-20 16:42
标题: 递归问题 谁能详细说下执行过程[已解决]
本帖最后由 黄克帅 于 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);
    }
}

作者: 8161776    时间: 2012-5-20 17:10
本帖最后由 杨尧 于 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. }
复制代码

作者: 黄克帅    时间: 2012-5-20 17:15
结果是13  怎么可能是两个数嘛
作者: 杨康    时间: 2012-5-20 19:09
给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;
本来想上个图给你分解下的,不过我画板出现了点小问题,一会好了 我给你上图。不知道我说的你能听懂不。
作者: 黄克帅    时间: 2012-5-20 19:37
上面的看懂了  谢谢  答案也是对的  我前面回答答案是13 是测试的时候输错了
作者: 彩虹    时间: 2012-5-20 19:58
分析:  首先是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, 下载次数: 22)

未命名.jpg





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