黑马程序员技术交流社区

标题: 递归的应用 [打印本页]

作者: 黑马-郑玉元    时间: 2013-4-2 22:21
标题: 递归的应用
  1. public static void main(String[] args) {
  2.                 System.out.println("请输入文件目录");
  3.                 File file = Demo02.getDir();
  4.                 printFileName(file,0);
  5.         }

  6.         private static void printFileName(File file,int n) {                  //打印文件的层次目录
  7.                
  8.                 File [] subFiles = file.listFiles();
  9.                 for(File files : subFiles){
  10.                         for(int i=0;i<n;i++)
  11.                                 System.out.print("\t");
  12.                         System.out.println(files.getName()+n);
  13.                         if(files.isDirectory())
  14.                                 printFileName(files,n+1);     // 为什么n+1与++n或者n++结果不同
  15.                 }
  16.         }
复制代码
为什么结果不一样!是哪步造成的?


作者: tshch1989    时间: 2013-4-2 23:06
++n是先把n的值加一以后在使用
n++是先使用n再把n的值加一
此处n+1应该与++n一样
作者: 黑马-郑玉元    时间: 2013-4-2 23:32
是哪步造成的!!!不是要你回答这个!三个结果都不一样!
作者: yangyinhui    时间: 2013-4-3 10:38
标题: RE: 递归的应用
我认为是在  System.out.println(files.getName()+n);这一步造成的
比如printFileName(files,n+1);第一次调用时是(n+1)
第二次调用时是(n+1)+1
第三次调用时是((n+1)+1)+1
...
作者: 赵亚威    时间: 2013-4-3 10:53
              for(File files : subFiles){

                      for(int i=0;i<n;i++)//这里的n是造成问题的关键 如果这里不是变量n 则n+1和 ++n是一样的 但因为这里 所以结果不一样 而n++和前面两个根本就不一样
                                                          //所以这三种你递归的结果都不一样
                               System.out.print("\t");

                     System.out.println(files.getName()+n);

                        if(files.isDirectory())

                              printFileName(files,n+1);     // 为什么n+1与++n或者n++结果不同

               }

作者: 黑马-郑玉元    时间: 2013-4-3 17:36
yangyinhui 发表于 2013-4-3 10:38
我认为是在  System.out.println(files.getName()+n);这一步造成的
比如printFileName(files,n+1);第一次调 ...

System.out.println(files.getName()+n);这个+n不要也一样!
作者: yangyinhui    时间: 2013-4-3 20:08
黑马-郑玉元 发表于 2013-4-3 17:36
System.out.println(files.getName()+n);这个+n不要也一样!

你现在知道原因了吗?
作者: 黑马-郑玉元    时间: 2013-4-3 20:25
yangyinhui 发表于 2013-4-3 20:08
你现在知道原因了吗?

不知道哟!
作者: 刘吉庆    时间: 2013-4-7 08:22
当然都不一样了,n+1不改变n的值,只是实参变了,实参变了,递归中的代码就会改变;++n是先给n赋n+1,再把n当作实参;n++是先把n当作实参再给n赋n+1




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2