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 ;了吗
{
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 ;了吗
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
你可以这样测试
当i=0 结果是5151
当i=99 结果是201
当i=100 结果是101 这个时候它就要+0了!
当i=101 肯定是0其实就是递归加到101 上!
当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
if (i>100){
return 0;}
return cal (++i)+i;
当i 为 101得时候不是运行 return o ;吗,。怎么还 可以返回5151
但是以前已经有了好多 return ……
当最好一次返回0时,是把这个返回值送回 return cal(101)+101 ,此时cal(101)=0
结果继续向上传递!
1=101时,return 0后,会返回到i=100的那个cal里,而不是直接退出整个递归过程。效果就是1楼说的那样
{
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));
}
}
运行下面的代码 你就可以看明白了
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));
}
}
当i<100的时候,就进行递归运算。
当i>=100的时候,就直接返回0.递归的上限是100.