java中的递归

来源:互联网 发布:网站推广优化平台 编辑:程序博客网 时间:2024/05/17 15:40
      喜欢用dephi写一些程序,总是感觉delphi的vcl特别的好用,接触java来对面向对象有了个全新的认识,确实好,对象的概念让变成变得实体化,思考的空间更大,因为一切都是对象,在oop的编程中也有类似对象的概念,那就是结构体/共同体,在delphi中就是记录record,但是对record的操作就不是很方便了,这样就要引入指针的概念,而java正式取缔了指针,一切都是对象,一个引用就是对对象的单体的地址指向,在团队大峡、stef等的帮助下概念越来越强,也感谢大家!
      设计很多程序的时候都会有个递归算法,就是当程序运行没有达到某种条件的时候就必须重新执行一遍,这个问题对于那些高人来说确实是非常简单的,但是写面向过程习惯了的人可能开始使用java的时候还不是十分的得心应手,原因很简单,因为c++和delphi中都有个goto,确实,goto不是好东西,一旦用的不好会带来灾难性的程序错误,所以java这些面向对象的高级语言中已经给他封杀了,这样对于开始接触java的人就会一时不好适应了!下面就我遇到的几个例子加以说明:
    1、十进制转换成二进制
   
delphi:
   function DecimalToBinaryz(integer i): string;
   var result:string;
        label:again;//goto的标签
   begin
    result:='';
   again:    
   if((i /2)=0) then
       begin
        result:=result+'1';
       return result;
       end;
       else
          begin
           i:=i/2;
           result:=result+'1';
          goto again;
        end;
   end;
 这样使用goto就非常轻松的实现递归调用了,java中没有了goto,这就要自己想办法,其实更简单:
       public static void DecimalToBinary(int num){
              if(num == 0){         //当num=0时,循环结束
                     return;
              }else{
                     DecimalToBinary(num/2);   //调用递归方法
                     System.out.print (num%2);
              }
              }
2、随机数不重复:
  
delphi中
  var num:integer;
  label:again;
  begin
     again:
     num:=random(9999);//随机出来一个0-9999内的数字
     adoconn.str:=....
     ..
     ...//从数据库中查询是否存在相同的num
    if recordcount<>0 then
    goto again else
    return num;
  end;
 这个程序在考试出题中不许同一张试卷不许出现同样的题中就十分管用了,在java中:
  
public static void randomNum(int num){
     int i=math.random(num);   
    boolean ret=...//从数据库中检索确认有无i的重复
    if (ret) {
      randomNum(num);
     }
    }
,呵呵,不写了,自己都觉得太简单了!