java 一道递归题

来源:百度知道 编辑:UC知道 时间:2024/05/30 04:32:31
public class Exercise222 {
public static void main(String args[]){

y1 ob = new y1(10);

for (int i = 0;i<10;i++) {ob.values[i]=i;
System.out.println("ob.values["+i+"]is"+i);}

ob.shuzu(10);
}

}

class y1 {
int values [];
y1(int x2){
values = new int[x2];
}
void shuzu(int y){
System.out.println("这个y"+y);
if (y==0) {System.out.println("这是第一次"); return;}
else {shuzu(y-1); System.out.println("现在"+(y-1));}
System.out.println("["+(y-1)+"] "+values[y-1]);
}

}
打印的结果如下:
ob.values[0]is0
ob.values[1]is1
ob.values[2]is2
ob.values[3]is3
ob.values[4]is4
ob.values[5]is5
ob.values[6]is6
ob.values[7]is7
ob.values[8]is8
ob.values[9]is9
这个y10
这个y9
这个y8
这个y7
这个y6
这个y5
这个y4
这个y3
这个y2

【这样改就不会升了】

void shuzu(int y){
System.out.println("这个y"+y);
if (y==0) {
return;
} else {
shuzu(y-1);
}
}

【简单说明】

递归思想只适合于解决一些特殊的问题。如:遍历一个二叉树。
这样的问题用递归是最简单的实现方法。

但是递归并不是那么容易掌握的,你要明白方法调用与栈的关系。
这就需要自己多练习,多思考了。

【提示】

所有的递归操作,都可以使用循环来代替。
如果不是非常特殊的操作,尽量不要使用递归,浪费栈空间。
并且容易造成栈溢出。

【多说一句】

有些东西是需要自己多思考,才会有收获的。

【补充】【这样改就变成升的了】

void shuzu(int y){
if (y==0) {

} else {
shuzu(y-1);
}
System.out.println("这个y"+y);
}

【你的代码很不规范,读起来很费事】

这个东西虽然我明白 但是还真是不好说
我简单的说一下看看你能明白不?
从"这个y10"开始时,是执行ob.shuzu(10)
但是在shuzu(int y);中输出的句子应该是三条吧?
要是没有调用shuzu(y-1)的话,输出就是:

这个y10
现在9
[9] 9

对吗?

但是在调用了shuzu(y-1)的话,也就是在第一行和第二行之间有输出了一个shuzu(10-1)

结果就是:

这个y10

这个y9
现在8