请问java递归应该怎么理解?
java吧
全部回复
仅看楼主
level 9
自己调用自己,看了很多都是这样写。但还是不太懂,是不是类似于一个for循环,当不符合条件就退出程序?
有一条面试题是用递归 算出1+2
+3
....+10000的结果。用递归算。
2013年02月21日 12点02分 1
level 9
掉得好快啊,我顶一下。
2013年02月21日 12点02分 2
level 12
2013年02月21日 12点02分 3
level 7
public ret fun(int x){
return x<10000?(x+fun(x+1)):x;
}
public static void main(String[] args){
int x=1;
System.out.println(fun(x));
}
2013年02月21日 12点02分 5
自己外面套个类。
2013年02月21日 12点02分
回复 陌小凩 :ret是什么意思?
2013年02月21日 12点02分
回复 陌小凩 :看来我的基础真的很差,第二句后面冒号x是什么意思?x不是字符串又不是数组。冒号的作用是什么??[88]
2013年02月21日 12点02分
搞错了。ret 改成int 我的错
2013年02月21日 12点02分
level 6
打开c盘根目录窗口
然后打开某个文件夹
再打开该文件夹的某个子文件夹
又打开该子文件夹的某个子文件夹
……
一直打开到没有文件夹的目录
接着连续按 后退
回到c盘根目录窗口
递归大概就是这种感觉
2013年02月21日 12点02分 6
有点感觉。[背扭]
2013年02月21日 13点02分
level 7
public class Main(){
public int fun(int x){
return x<10000?(x+fun(x+1)):x;
}
public static void main(String[] args){
int x=1;
System.out.println(fun(x));
}
}你试试看看。。。
2013年02月21日 13点02分 7
类名后面跟括号?
2013年02月21日 13点02分
测试通过,方法fun要设置为静态的。,
2013年02月21日 13点02分
回复 7658275 :[啊!][啊!][啊!][啊!]丢脸就到家了[啊!]
2013年02月21日 13点02分
还是问一下,冒号的作用。
2013年02月21日 13点02分
level 11
1.调用自己
2.出口
2013年02月21日 13点02分 8
谢谢,已经有点理解。
2013年02月21日 14点02分
level 3
斐波纳契数列
public static int f(int i){
if(i==1||i==2){
return 1;
}
return f(i-1)+f(i-2);
}
public static void main(String[] args){
int i=1;
do{
int fei=f(i);
i++;
System.err.print(fei+" ");
}while(i<=30);
2013年02月26日 14点02分 10
现在已经有点开窍了。谢谢。[Love]
2013年02月26日 14点02分
吧务
level 15
刚开始想理解递归,最好的办法就是找一个比较简单的递归方法,比如从1加到5,然后自己在纸上画着运行一遍,你就明白了。。。
每次的递归调用,你就当它是在调用另一个方法。。。如f1、f2……这样。
2013年02月26日 14点02分 11
已经初步了解,谢谢
2013年02月26日 14点02分
level 9
尼玛,谁挖出来的。[啊!]我已经了了,各位大神
2013年02月26日 14点02分 12
level 7
[88]同感
2013年02月26日 14点02分 13
[背扭]我已经有点了解。孩纸痛苦去吧
2013年02月26日 14点02分
吧务
level 15
不懂帮顶。
2013年02月26日 15点02分 14
水一下!~
2013年02月27日 11点02分
level 2
理解递归首先要理解递归
2013年02月27日 11点02分 15
看过这句话了[瀑布汗~]
2013年02月28日 02点02分
level 9
[瞌睡]递归有时候比较可怕,没有深度限制的话可能就栈溢出了
2013年02月27日 11点02分 16
死循环[拍砖]
2013年02月28日 02点02分
回复 7658275 : stack overflow
2013年02月28日 02点02分
回复 fwreader :[啊!]好丢脸
2013年02月28日 02点02分
回复 7658275 : Not at all
2013年02月28日 03点02分
level 5
递归调用 与 for 调用 的根本不同在于:
递归各调用有自己的 stack , 而 for 的 loop 调用 共享一个 stack.
2013年02月27日 12点02分 17
学习了。[Love]
2013年02月28日 02点02分
[瞌睡]还不是同一个stack,只不过SP不一样而已
2013年02月28日 03点02分
回复 gagaffer : Yes, same system stack. Here I mean the invocation stack for each call. By different stack, the function has its own local variables
2013年02月28日 03点02分
回复 fwreader :call function的时候返回地址,参数压栈,然后SP减去local variables大小,这时候的SP才是当前的SP,栈还不是原来的栈呀,写过VM的都知道,栈里还是保存着call之前的stack frame,怎么可能说是不同的栈,无非SP栈指针的偏移量不同,这也就是为什么调用深度过大,造成栈溢出的原因
2013年02月28日 03点02分
1