`
senton
  • 浏览: 200444 次
  • 性别: Icon_minigender_1
  • 来自: 紫禁城
社区版块
存档分类
最新评论

递归在java语言中的应用

    博客分类:
  • J2SE
阅读更多


一 . 两个小经验
  1.在定义一个类时,不要随意定义成员变量.除非它是这个类的一个属性或者在类的多个方法中要用到 它.

  2.
   public class Test  {
      public static void main(String[] args)  {
         byte[] b = new byte[102400*1024];
      }
   }
   这是一个简单的程序,在写上传文件的程序时极有可能遇到这个情况.比喻说有一个文件的长度是100M.  在读取文件内容时就会这样写byte[] b = new   byte[102400*1024],但是在运行时会出一个内存越界错误.在实际应用中一定要非常小心.
 
二 . 递归:
  先看一个小例子:
    public class Recursion {
       public static void func() {
          func();
       }
       public static void main(String[] args)  {
          func();
       }
    }
  上面就是一个简单的递归程序,运行一定会把内存吃光,所以在使用递归时一定要加上特定的条件
  
  下面再看几个递归的例子.
  (1) .
  public class YueShuTest { 
   //求最大公约数
     public static void yueshu(int num1,int num2) {
         if(num1 == num2) {
            System.out.println (num1);
         }
        else  {
            yueshu(Math.abs(num1 - num2),Math.min(num1,num2));
        }
   }
 
   //求二进制
   public static void binary(int num) {
       if(num > 0) {
          binary(num / 2);
          System.out.print (num % 2);
       }
    }  
  }
  下面在看一个最经典的汉诺塔问题(很复杂的一个问题).
  public class Hanon {
     static void hanon(int n,char a,char b,char c) {
         if(n == 1) {
            move(1,a,c);
            return;
        }  
        hanon(n - 1,a,c,b);
        move(n,a,c);
        hanon(n - 1,b,a,c); 
     }
   
     static void move(int n,char a,char c) {
         System.out.println (n + ":" + a + "-->" + c);
      }
   
      public static void main(String[] args) {
         hanon(3,'A','B','C');
      }
 }
 看看,一个多么复杂的问题这么几行代码就搞定了.递归的威力无穷啊!
 再来看一个更复杂的.
  import java.io.*; 
  class FileWrapper extends File {
    private boolean bLast = false;
    private FileWrapper parent = null;
    public FileWrapper(File f,boolean bLast,FileWrapper parent) {
      super(f.getPath());
      this.parent = parent;
      this.bLast = bLast;
    }
   
    public FileWrapper getMyParent() {
     return parent;
    }
   
   public boolean isLast() {
     return bLast;
    } 
  }
  
  
  public class FileTree{
   //第一种方法.
    /*public static String makeSpaces(int level) {
    StringBuffer sbf = new StringBuffer();
    for (int i = 0; i < level; i++)
       {
        sbf.append("   ");
       }
       return sbf.toString();
   }
   
   public static void listFile(File f,int level)
   {
    if(!f.exists())
    {
     System.out.println ("该文件不存在!");
     return;
    }
    
    System.out.println (makeSpaces(level) + f.getName());
    if(f.isDirectory())
    {
     File[] fs = f.listFiles();
     for(File file : fs)
     {
      listFile(file,(level + 1));
     }
    }
   }
   
   public static void main(String[] args)
      {
       File file;
       if(args.length < 1)
       {
        file = new File(".");
       }
       else
       {
        file = new File(args[0]);
       }
       listFile(file,0);
      }
   */
   这段代码打印出来的结果如下:
   
   //第二种方法
      public static void listFile(FileWrapper fw)
      {
       if(!fw.exists())
       {
        System.out.println ("该文件不存在!");
        return;
       }
       
       System.out.println (makePrefix(fw) + fw.getName());
       if(fw.isDirectory())
       {
        File[] fs = fw.listFiles();
           for (int i = 0 ;i < fs.length;i++)//File fl : fs)
           {
            File f1 = fs[i];
            FileWrapper fw1 = null;
            if(i == fs.length - 1)
            {
             fw1 = new FileWrapper(f1,false,fw);
            }
            else
            {
             fw1 = new FileWrapper(f1,true,fw);
            }
               listFile(fw1);
           }
           
       }       
      }
     
      public static void main(String[] args)
      {
       File file;
       if(args.length < 1)
       {
        file = new File(".");
       }
       else
       {
        file = new File(args[0]);
       }
       FileWrapper fw = new FileWrapper(file,true,null);
       listFile(fw);
      }
     
      public static void makeParentPrefix(FileWrapper fw,StringBuffer prefix)
      {
       if(fw.getMyParent().getMyParent() == null)
       {
        return;
       }
       
       FileWrapper parent = fw.getMyParent();
       if(parent.isLast())
       {
        prefix.append("  │"); 
       }
       else
       {
        prefix.append("    ");
       }
       
       makeParentPrefix(parent,prefix);
      }
     
      public static String makePrefix(FileWrapper fw)
      {     
       if(fw.getMyParent() == null)
       {
          return "";
       }
       
       StringBuffer sbf = new StringBuffer();
       if(fw.isLast())
       {
        sbf.append("─├");
       }
       else
       {
        sbf.append("─└");
       }
       
       makeParentPrefix(fw,sbf);
       sbf.reverse();
       return sbf.toString();
      }
  }
  这段代码打印出来的结果如下:


三 . 要在执行ant的命令行窗口中给build.xml中的java任务执行的类传递参数,怎么做?这个问题还在探讨中...请高手指教.

分享到:
评论

相关推荐

    递归与迭代算法及其在JAVA语言中的应用.pdf

    递归与迭代算法及其在JAVA语言中的应用.pdf

    递归在java语言中的应用.pdf

    递归在java语言中的应用.pdf

    递归与迭代算法及其在JAVA语言中的应用.zip

    递归与迭代算法及其在JAVA语言中的应用

    Java语言程序设计-基础篇(原书第8版)

    《Java语言程序设计:基础篇(原书第8版)》以示例讲解解决问题的技巧,提供大量的程序清单和相应的提示,每章配有大量复习题和编程练习题,帮助读者掌握编程技术,并应用所学的技术解决实际应用程序开发中遇到的问题。...

    Java语言程序设计-基础篇(原书第8版) 高清完整PDF版

    《Java语言程序设计:基础篇(原书第8版)》以示例讲解解决问题的技巧,提供大量的程序清单和相应的提示,每章配有大量复习题和编程练习题,帮助读者掌握编程技术,并应用所学的技术解决实际应用程序开发中遇到的问题。...

    Java语言程序设计:基础篇(原书第8版)

    《Java语言程序设计:基础篇(原书第8版)》以示例讲解解决问题的技巧,提供大量的程序清单和相应的提示,每章配有大量复习题和编程练习题,帮助读者掌握编程技术,并应用所学的技术解决实际应用程序开发中遇到的问题。...

    数据结构与问题求解Java语言

    本书分为四个部分:第一部分讨论适合大多数应用的集合类API的一个子集,并覆盖基本的算法分析技术、递归和排序算法;第二部分包含了一组集合类API的应用实例;第三部分讨论数据结构的实现;第四部分描述了高级的数据...

    Java语言的科学与艺术(国外计算机科学经典教材)

    但Java语言很复杂,老师和学生们在理解Java语言的结构时,复杂性成为了最大的障碍。  在本书中,斯坦福大学教授、著名的计算机科学教育领导者Eric S.Roberts着重强调了更适合于初学者的友好讲解方式,使用ACM Java...

    Java语言程序设计-基础篇(原书第8版)

    《Java语言程序设计:基础篇(原书第8版)》以示例讲解解决问题的技巧,提供大量的程序清单和相应的提示,每章配有大量复习题和编程练习题,帮助读者掌握编程技术,并应用所学的技术解决实际应用程序开发中遇到的问题。...

    Java语言基础下载

    在Java中使用HQL 709 内容总结 712 独立实践 712 第三十七章 Spring介绍 713 学习目标 713 Spring简介 714 IOC控制反转 714 Spring的容器 715 AOP面向切面编程 715 AOP的专业术语 715 Spring事务管理 718 Spring与...

    125集专攻JAVA基础 JAVA零基础入门学习视频教程 动力节点JAVA视频教程.txt

    北京动力节点-Java编程零基础教程-004-编程基础-在Window中显示文件扩展名.mp4 北京动力节点-Java编程零基础教程-005-Java语言概述-Java的诞生.mp4 北京动力节点-Java编程零基础教程-006-Java语言概述-Java的特点...

    Java语言的科学与艺术 斯坦福大学经典教材

    但Java语言很复杂,老师和学生们在理解Java语言的结构时,复杂性成为了最大的障碍。 在本书中,斯坦福大学教授、著名的计算机科学教育领导者Eric S.Roberts着重强调了更适合于初学者的友好讲解方式,使用ACM Java库...

    数据结构与算法-Java语言版

    本书选择Java语言以面向对象的方式描述数据结构,还特别强调了封装和分解的信息隐藏原理。主要内容包括:面向对象编程的基本原理,判定算法效率的方法,堆栈、队列及其应用,对于多种递归的详细讨论,二叉树、B树、2...

    数据结构与算法分析_Java语言描述(第2版)]

    中文名: 数据结构与算法分析_Java语言描述(第2版)作者: 韦斯译者: 冯舜玺资源格式: PDF版本: 扫描版出版社: 机械工业出版社书号: ISBN:9787111231837发行时间: 2009年01月01日地区: 大陆语言: 简体中文简介: 内容...

    Java 程序递归线性搜索数组中的元素.docx

    Java是一种功能强大、可靠性高、跨平台的编程语言,适用于各种应用场景。它被广泛用于企业级应用开发、移动应用开发、云计算、大数据处理等领域,是一门值得学习和掌握的编程语言。

    java源码包---java 源码 大量 实例

     Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...

    数据结构与算法分析Java语言描述(第二版)

    目录译者序前言第1章 引论1.1 本书讨论的内容1.2 数学知识复习1.2.1 指数1.2.2 对数1.2.3 级数1.2.4 模运算1.2.5 证明的方法1.3 递归简论1.4 实现泛型特性构件pre-Java51.4.1 使用Object表示泛型1.4.2 基本...

Global site tag (gtag.js) - Google Analytics