Java 递归 Recursion.

importjava.io.*;publicclassTest03{publicstaticvoidmain(String[]args){Filef=newFile("D... import java.io.*;
public class Test03{
public static void main(String[] args){

File f = new File("D:/course");
method1(f);
}
public static void method1(File f){
if(f.isFile()){
return;
}
File[] fs = f.listFiles();

for(File subF : fs){
System.out.println(subF.getAbsolutePath());
method1(subF);
}
}
}

这段代码看不明白,希望大家帮帮我. 谢谢.
如果D:/course里面有ff.txt文件和一些文件夹. "subF"从"fs"读取一个数据. subF.getAbsolutePath() subF[0]应该是ff.txt的路径.
哪麼当他再call method1(subF);时 f.isFile() == true. 程序应该停了才对啊...

但它还能找出D:/course里面所有子目录和文件.

看懂的朋友可以详细解释运行过程吗?
看了你的回覆我有新理解,但不知道有没有理解错误

开始用main里面的 method1( f ) call method1( ) . 在stack第一层里面有一个method1( ).
因为第一层是用"File f = new File("e://courses");" call method1( ). 所以当 fs = f.listFiles(); 记录e://courses里面所有目录同文件. fs { d:/courses/ff.txt, d:/courses/test1, d:/courses/test2,}

当程序用 method1(fs[ 0 ] = d:/courses/ff.txt, ); call method1( ) 这时在stack第二层里面有一个新的method1( ) 因为call第二层method1( )是传送一个文件 d:/courses/ff.txt. 所以 f.isFile() = true. return. 但return的只是停止第二层的method1( ).

现在回到stack第一层. 第一层是用Method( f = e://courses ) call
第一层For Loop 继续执行, i++ i<fs.length method1(fs[ 1 ] = d:/courses/test1 )
这时在stack里Creat第3层Method1( );
第3层Method1( ) 用 method1(fs[ 1 ] = d:/courses/test1 ) call.
所以fs{ d:/courses/test1/dummy.txt }; 第3层 method1.( fs[ 0 ] ); f.isFile( ) = true. return.
但return的只是停止第3层的method1( ).

现在回到stack第一层.......
展开
 我来答
杰克萧
2013-03-31 · TA获得超过364个赞
知道小有建树答主
回答量:337
采纳率:0%
帮助的人:444万
展开全部
method1函数递归调用自己,当遇到普通文件ff.txt时,会执行“return”语句返回;返回只是返回到上一级method1()调用,并不会退出整个程序。你之所以认为会停下来,是因为你对函数递归调用的概念还没理解。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式