黑马程序员技术交流社区
标题:
关于递归,求解
[打印本页]
作者:
赵嘉男
时间:
2012-4-26 13:28
标题:
关于递归,求解
public class T1{
public static void main(String[] args){
int n=8;
System.out.println("共有"+cattle(n)+"头牛!");
}
public static int cattle(int n){
if(n<=0)
return 0;
if(n<=2)
return 1;
return cattle(n-1)+cattle(n-2);
}
}
return cattle(n-1)+cattle(n-2); 这段代码是怎么执行的,求解
作者:
张小庆
时间:
2012-4-26 13:37
就是你传进去的n的值如果不符合前面的两个if,就再传给cattle()方法,直到符合了
作者:
刘少伟
时间:
2012-4-26 14:14
标题:
()
本帖最后由 刘少伟 于 2012-4-26 14:15 编辑
这个是斐波那契数列(1,1,2,3,5,8,13,21……),起始的1和2(代码第二个if,n<=2情况)对应的值为1。从第三个起(也就是排除n<=0和n<=2的情况),后一个数等于前两个数的和,所以,每次计算某个数n对应的cattle值,都要调用n-1和n-2对应的cattle(),如果不符合调用条件,返回0。
作者:
倪杭乘
时间:
2012-4-26 14:33
n=3(3是2和1的和)
cattle(2)+cattle(1)
0+1
n=4(3和2的和)
cattle(3)(2和1的和)+cattle(2)
n=5(4和3的和)
cattle(4)+cattle(3)
作者:
高彰谦
时间:
2012-4-26 14:49
首先我并不知道这个算法的意义是什么
return cattle(n-1)+cattle(n-2); 这段代码是怎么执行的,求解
关于 return 的这句,只是先执行完cattle(n-1)的递归,然后是cattle(n-2)的递归。然后再把结果相加
作者:
光sail
时间:
2012-4-26 15:18
public static int cattle(int n){
if(n<=0)
return 0;
if(n<=2)
return 1;
return cattle(n-1)+cattle(n-2);
}
复制代码
这段代码是当传进来的值不满足前面两个if条件时,执行return语句,执行return语句是先把传进来的值进行减一和减二运算,再把进行减法运算的两个值分别依次作为参数调用cattle方法,当传进来的参数不满足大于等于0且小于等于2是,再次执行return语句,重复前面的步骤,直到传进来的两个参数满足小于等于0或小于等于2时,返回相应的值,并把返回值作为参数,进行之前return的重复调用运算
作者:
施俊
时间:
2012-4-26 15:54
无标题.jpg
(26.63 KB, 下载次数: 63)
下载附件
2012-4-26 15:53 上传
调用过程如图所示,红色为结果,相加为最终
作者:
邵中国
时间:
2012-4-26 17:17
8进去 返回cattle(7)+cattle(6)
再调cattle(6)+cattle(5) +cattle(5)+cattle(4)
然后cattle(5)+cattle(4) +cattle(4)+ cattle(3) + cattle(4)+cattle(3) +cattle(3)cattle(2)
……
然后加起来返回
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2