请问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
AHHFBOY
2013年02月21日 12点02分
3
level 7
飞堂年P
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
飞堂年P
自己外面套个类。
2013年02月21日 12点02分
柴可夫司机🍀
回复 陌小凩 :ret是什么意思?
2013年02月21日 12点02分
柴可夫司机🍀
回复 陌小凩 :看来我的基础真的很差,第二句后面冒号x是什么意思?x不是字符串又不是数组。冒号的作用是什么??
2013年02月21日 12点02分
飞堂年P
搞错了。ret 改成int 我的错
2013年02月21日 12点02分
level 6
编道行者
打开c盘根目录窗口
然后打开某个文件夹
再打开该文件夹的某个子文件夹
又打开该子文件夹的某个子文件夹
……
一直打开到没有文件夹的目录
接着连续按 后退
回到c盘根目录窗口
递归大概就是这种感觉
2013年02月21日 12点02分
6
柴可夫司机🍀
有点感觉。
2013年02月21日 13点02分
level 7
飞堂年P
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分
飞堂年P
回复 7658275 :
丢脸就到家了
2013年02月21日 13点02分
柴可夫司机🍀
还是问一下,冒号的作用。
2013年02月21日 13点02分
level 11
Vampire_Csn
1.调用自己
2.出口
2013年02月21日 13点02分
8
柴可夫司机🍀
谢谢,已经有点理解。
2013年02月21日 14点02分
level 3
wo有奶小生
斐波纳契数列
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
柴可夫司机🍀
现在已经有点开窍了。谢谢。
2013年02月26日 14点02分
吧务
level 15
libo_juve
刚开始想理解递归,最好的办法就是找一个比较简单的递归方法,比如从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
狂飙_de蜗牛
同感
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
ablaze17
理解递归首先要理解递归
2013年02月27日 11点02分
15
柴可夫司机🍀
看过这句话了
2013年02月28日 02点02分
level 9
gagaffer
递归有时候比较可怕,没有深度限制的话可能就栈溢出了
2013年02月27日 11点02分
16
柴可夫司机🍀
死循环
2013年02月28日 02点02分
fwreader
回复 7658275 : stack overflow
2013年02月28日 02点02分
柴可夫司机🍀
回复 fwreader :
好丢脸
2013年02月28日 02点02分
fwreader
回复 7658275 : Not at all
2013年02月28日 03点02分
level 5
fwreader
递归调用 与 for 调用 的根本不同在于:
递归各调用有自己的 stack , 而 for 的 loop 调用 共享一个 stack.
2013年02月27日 12点02分
17
柴可夫司机🍀
学习了。
2013年02月28日 02点02分
gagaffer
还不是同一个stack,只不过SP不一样而已
2013年02月28日 03点02分
fwreader
回复 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分
gagaffer
回复 fwreader :call function的时候返回地址,参数压栈,然后SP减去local variables大小,这时候的SP才是当前的SP,栈还不是原来的栈呀,写过VM的都知道,栈里还是保存着call之前的stack frame,怎么可能说是不同的栈,无非SP栈指针的偏移量不同,这也就是为什么调用深度过大,造成栈溢出的原因
2013年02月28日 03点02分
1