A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yjsf216 中级黑马   /  2015-3-8 22:55  /  922 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

遍历所以目录打印出来,即使目录层很多也不会溢出,
  1. public class FileDemo{
  2.         public static void main(String[] args){
  3.                         File dir= new File("d:\\work");
  4.                         showDir(dir);
  5.         }
  6.        
  7.         public static void showDir(File dir){
  8.                 System.out.println(dir);
  9.                
  10.                 File[] files= dir.listFiles();
  11.                 for(int x=0; x<files.length; x++){
  12.                         if(files[x].isDirectory())
  13.                                 showDir(files[x]);
  14.                         else
  15.                                 System.out.println(files[x]);
  16.                 }
  17.                
  18.         }
  19.        
  20. }
复制代码

而求二进制
  1. static void toBin(int num){
  2. if(num>0){
  3.                 toBin(i/2);
  4.                 sop(i%2);
  5. }
  6. }
复制代码

toBin(999999):就会溢出会内存溢出?

4 个回复

倒序浏览
本帖最后由 doomsday 于 2015-3-8 23:10 编辑

遍历目录的时候,是一级一级的往下遍历,至到最底层,最底层遍历完了就上层,接着遍历,递归返回遍历的时候new的对象会跟着在内存中消失,而目录最长的也没多少层吧(至少我的电脑上10层的也不多),new的对象就没多少

求二进制的时候,是一直除2直到除不下的时候为止,递归时new的对象才慢慢的在递归返回时从内存中清除,999999/2得除多少回啊,得new多少个对象啊

点评

999999/2也就20次除到1,根本不会溢出  发表于 2015-3-8 23:22
回复 使用道具 举报
但是目录中的是树形结构啊,这样也会很多的啊?
回复 使用道具 举报
没有溢出,运行正常。另外即便你给的参数是long类型的最大值也不可能溢出,因为那仅仅递归63次
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马