一个看不懂得程序请教

heqingrong623 2009-06-12 11:02:06
public class Col
{
public int cal(int i)
{
if (i>100){
return 0;}
return cal (++i)+i;

}
public static void main(String[] argv)
{
Col cou=new Col();
int i=0;
System.out.println(cou.cal(i));
}
}

这个程序运行得到得结果是 5151 ,为什么不是 0呢,,怎么理解
if (i>100){
return 0;}
return cal (++i)+i;
i>100不就 return o ;了吗
...全文
28 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
timmf 2009-06-19
  • 打赏
  • 举报
回复
你应该是对递归机制不太了解,而不是对return机制不太了解。
heqingrong623 2009-06-19
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 kbyst 的回复:]
引用 10 楼 avoidxx 的回复:
引用 8 楼 heqingrong623 的回复:
我知道是递归,但是我是想不明白两个 return 怎么个走法
if (i>100){
return 0;}
return cal (++i)+i;
当i 为 101得时候不是运行 return o ;吗,。怎么还 可以返回5151


1=101时,return 0后,会返回到i=100的那个cal里,而不是直接退出整个递归过程。效果就是1楼说的那样



这个可以懂~~
[/Quote]
为什么1=101时,return 0后,会返回到i=100的那个cal里,而不是直接退出整个递归过程 ,,对return 机制不太熟敬请解析
whlxjq520 2009-06-17
  • 打赏
  • 举报
回复
不是太懂,算法的问题就头疼!
happy1986 2009-06-16
  • 打赏
  • 举报
回复
没看懂程序的意思罢了。
当i<100的时候,就进行递归运算。
当i>=100的时候,就直接返回0.

递归的上限是100.
avoidxx 2009-06-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 heqingrong623 的回复:]
我知道是递归,但是我是想不明白两个 return 怎么个走法
if (i>100){
            return 0;}
        return cal (++i)+i;
当i 为 101得时候不是运行 return o ;吗,。怎么还 可以返回5151
[/Quote]

1=101时,return 0后,会返回到i=100的那个cal里,而不是直接退出整个递归过程。效果就是1楼说的那样
lovelyfans 2009-06-12
  • 打赏
  • 举报
回复
最后一次返回的的确是 0
但是以前已经有了好多 return ……
当最好一次返回0时,是把这个返回值送回 return cal(101)+101 ,此时cal(101)=0
结果继续向上传递!
heqingrong623 2009-06-12
  • 打赏
  • 举报
回复
我知道是递归,但是我是想不明白两个 return 怎么个走法
if (i>100){
return 0;}
return cal (++i)+i;
当i 为 101得时候不是运行 return o ;吗,。怎么还 可以返回5151
  • 打赏
  • 举报
回复
递归总是弄不太清楚,楼主慢慢想就知道了
当101的时候,retrun 0;所以这句话就是return cal (++i)+i; //0+,此时是cal(101)+101=0+101所以retrun 101;
当retrun 101之后,上一层的i是100就变成了cal(100)+100;//cal(100)刚才retrun 的是101,之后就成return 100+101;之后201继续往上return;就是retrun 201+99;
以次类推最后就是从101一直加到0的运算;最后结果5151
yan20010906 2009-06-12
  • 打赏
  • 举报
回复
这个函数用FOR循环写让人看的更清楚
岁月之梦 2009-06-12
  • 打赏
  • 举报
回复
Lz这个问题有意思的!哈哈
你可以这样测试
当i=0 结果是5151
当i=99 结果是201
当i=100 结果是101 这个时候它就要+0了!
当i=101 肯定是0

其实就是递归加到101 上!
timmf 2009-06-12
  • 打赏
  • 举报
回复
很基础的知识
xnjnmn 2009-06-12
  • 打赏
  • 举报
回复
这是个递归这样输出LZ应该看得清楚些
public class Col 
{
public int cal(int i)
{
if (i>100){
return 0;}
System.out.println(i);
//递归执行++i的操作和 cal (++i)
int j= cal (++i)+i;
//执行+i操作
System.out.println(j+"---");
return j;
}
public static void main(String[] argv)
{
Col cou=new Col();
int i=0;
System.out.println(cou.cal(i));
}
}

输出
0--
1--
2--
3--
4--
5--
6--
7--
8--
9--
10--
11--
12--
13--
14--
15--
16--
17--
18--
19--
20--
21--
22--
23--
24--
25--
26--
27--
28--
29--
30--
31--
32--
33--
34--
35--
36--
37--
38--
39--
40--
41--
42--
43--
44--
45--
46--
47--
48--
49--
50--
51--
52--
53--
54--
55--
56--
57--
58--
59--
60--
61--
62--
63--
64--
65--
66--
67--
68--
69--
70--
71--
72--
73--
74--
75--
76--
77--
78--
79--
80--
81--
82--
83--
84--
85--
86--
87--
88--
89--
90--
91--
92--
93--
94--
95--
96--
97--
98--
99--
100--
101---
201---
300---
398---
495---
591---
686---
780---
873---
965---
1056---
1146---
1235---
1323---
1410---
1496---
1581---
1665---
1748---
1830---
1911---
1991---
2070---
2148---
2225---
2301---
2376---
2450---
2523---
2595---
2666---
2736---
2805---
2873---
2940---
3006---
3071---
3135---
3198---
3260---
3321---
3381---
3440---
3498---
3555---
3611---
3666---
3720---
3773---
3825---
3876---
3926---
3975---
4023---
4070---
4116---
4161---
4205---
4248---
4290---
4331---
4371---
4410---
4448---
4485---
4521---
4556---
4590---
4623---
4655---
4686---
4716---
4745---
4773---
4800---
4826---
4851---
4875---
4898---
4920---
4941---
4961---
4980---
4998---
5015---
5031---
5046---
5060---
5073---
5085---
5096---
5106---
5115---
5123---
5130---
5136---
5141---
5145---
5148---
5150---
5151---
5151
Pbulic 2009-06-12
  • 打赏
  • 举报
回复
up...
rumlee 2009-06-12
  • 打赏
  • 举报
回复
这个代码是利用递归方法求1+2+3+……+99+100+101的值。可以算一下是多少了。
dixiasenlin 2009-06-12
  • 打赏
  • 举报
回复
还好,不难理解
kbyst 2009-06-12
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 avoidxx 的回复:]
引用 8 楼 heqingrong623 的回复:
我知道是递归,但是我是想不明白两个 return 怎么个走法
if (i>100){
return 0;}
return cal (++i)+i;
当i 为 101得时候不是运行 return o ;吗,。怎么还 可以返回5151


1=101时,return 0后,会返回到i=100的那个cal里,而不是直接退出整个递归过程。效果就是1楼说的那样
[/Quote]

这个可以懂~~
timmf 2009-06-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 heqingrong623 的回复:]
我知道是递归,但是我是想不明白两个 return 怎么个走法
if (i>100){
return 0;}
return cal (++i)+i;
当i 为 101得时候不是运行 return o ;吗,。怎么还 可以返回5151
[/Quote]

看来楼主您还是没有掌握递归的精髓啊。画个图应该会明白的快一点。
s1314bin 2009-06-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 heqingrong623 的回复:]
我知道是递归,但是我是想不明白两个 return 怎么个走法
if (i>100){
return 0;}
return cal (++i)+i;
当i 为 101得时候不是运行 return o ;吗,。怎么还 可以返回5151
[/Quote]

运行下面的代码 你就可以看明白了
public class Col 
{
public int cal(int i)
{
if (i>100){
System.out.println(i);
return 0;}
System.out.print(i+"+");
return cal(++i)+i;

}
public static void main(String[] argv)
{
Col cou=new Col();
int i=0;
System.out.println(cou.cal(i));
}
}
s1314bin 2009-06-12
  • 打赏
  • 举报
回复
public class Col 
{
public int cal(int i)
{
if (i>100){
System.out.println(i);
return 0;}
System.out.print(i+"+");
return cal (++i)+i;

}
public static void main(String[] argv)
{
Col cou=new Col();
int i=0;
System.out.println(cou.cal(i));
}
}
behappy373 2009-06-12
  • 打赏
  • 举报
回复
good ..终于看懂了

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧