黑马程序员技术交流社区
标题:
递归问题 谁能详细说下执行过程[已解决]
[打印本页]
作者:
黄克帅
时间:
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 编辑
public class UserTest {
public static void main(String[] args) {
System.out.println(method(6));//调用method()方法参数是6
}
//第一次调用下面的方法参数的6所以执行else 调用method(5)+ method(4)
//接着还是els 调用method(4)+method(3) +method(3)+method(2)
//method(3)+method(2)+method(2)+method(1) + method(2)+method(1) +1
//method(2)+method(1)+1+1+1 +1+1+1
//结果应该是8
private static int method(int i) {
if(i == 1||i==2) return 1;
else
return method(i-1)+method(i-2);
}
}
复制代码
作者:
黄克帅
时间:
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, 下载次数: 29)
下载附件
2012-5-20 19:56 上传
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2