黑马程序员技术交流社区
标题:
Java递归算法
[打印本页]
作者:
黑马潘浩
时间:
2013-3-10 23:34
标题:
Java递归算法
本帖最后由 黑马潘浩 于 2013-3-10 23:58 编辑
class Demo {
public static int b(int m){
if(1>m){
return 0;
}else{
return m---b(m);
}
}
public static void main(String[] args) {
int t=b(10);
System.out.println(t);
}
}
复制代码
为什么运行结果是5,求运算逻辑?
作者:
熊冠银
时间:
2013-3-11 00:09
———是神马玩意啊
作者:
曾钦
时间:
2013-3-11 00:28
语言解释显得苍白无力。。。。有图有真相。。。
真正想知道过程的,下载下附件看看我的个人见解吧。。
作者:
施家雄
时间:
2013-3-11 00:39
本帖最后由 施家雄 于 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。
作者:
amen0205
时间:
2013-3-11 05:04
你知道自己用的递归吧 10进去 开始计算 10-(9-(8-(7-(6-(5-(4-(3-(2-(1-0))))))))) 你得出结果就是5
作者:
沈文杰
时间:
2013-3-11 07:10
本帖最后由 沈文杰 于 2013-3-11 07:12 编辑
public class DiGui {
public static int b(int m){
if(1>m){
return 0;
}else{
//先要弄清这句话什么意思,其实就是return(m--)-b(m);
return m---b(m);
//为了规范和便于阅读,建议使用return(m--)-b(m);
}
}
public static void main(String[] args) {
/*
* 下列代码用于测试
int j =3;
System.out.println(j--);//3-->(j--)=自减前的j
System.out.println(j);//2-->j=自减后的j
*/
int t=b(10);
System.out.println(t);
}
}
/*
m t if(else) return t=?
10 b(10) else 10-b(9) 10-b(9)
9 else 9-b(8) 10-(9-b(8))
8 else 8-b(7) 10-(9-(8-b(7)))
7 else 7-b(6) 10-(9-(8-(7-b(6))))
6 else 6-b(5) ...
5 else 5-b(4) ...
4 else 4-b(3) ...
3 else 3-b(2) ...
2 else 2-b(1) ...
1 else 1-b(0) 10-(9-(8-(7-(6-(5-(4-(3-(2-b(1)))))))))
0 if 0 10-(9-(8-(7-(6-(5-(4-(3-(2-1-(0)))))))))
t = 10-9+8-7+6-5+4-3+2-1
= (10-9)+(8-7)+(6-5)+(4-3)+(2-1)
= 1*5
= 5
*/
复制代码
作者:
邹学良
时间:
2013-3-11 07:51
标题:
解
代码写得大众化点就能知道怎么回事了
public static int b(int m){
if(1>m){
return 0;
}else{
m--;
return m-b(m);
}
}
public static void main(String[] args) {
System.out.println(b(10));
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2