递归学习笔记

作者在 2008-10-18 16:44:36 发布以下内容
什么使递归?
     递归是一个直接或间接调用自身的方法.
基本递归规则.
①基本情况:至少有一种情况可以不用递归解决.
        如n=1是就不需要递归解决
②前进:任何递归调用必须朝着基本情况前进.
③总是假设递归调用是可行的.
④复利规则:永远不要在不同的递归调用中重复执行解决同一问题实例的工作.

记住:不要用递归代替简单的循环
  1. /**
  2.  * 基本的递归算法
  3.  *以任何数值打印数
  4.  * @author HuangYunLin
  5.  */
  6. public class Recursive {

  7.     public void printDecimal(long n) {
  8.         if (n >= 10) {
  9.             printDecimal(n / 10);
  10.             System.out.print(n+"\n");//如一个栈,递归是一个自然的副产品,方法调用和方法返回使栈操作
  11.             //自己做个调试你就会明白这点道理了!
  12.         }
  13.         System.out.print((char) ('0' + (n % 10)) + "\n");
  14.     }

  15.     public void printInt(long n, int base) {
  16.         String DIGIT_TABLES = new String();
  17.         if (n >= 10) {
  18.             printInt(n / base, base);
  19.         }
  20.         System.out.print(DIGIT_TABLES.charAt((int) (n % base)));
  21.     }
  22.     /*------------------------------------------------------------------*/
  23.     /**
  24.      * 改进上面的算法,在改进算法中我们加入判断程序.
  25.      * 测试base的合法行
  26.      */
  27.     private static final String DIGIT_TABLE = "0123456789abcdef";//16位
  28.     private static final int MAX_BASE = DIGIT_TABLE.length();

  29.     public void printIntRec(long n, int base) {
  30.         if (n >= 10) {
  31.             printIntRec(n / base, base);
  32.         }
  33.         System.out.print(DIGIT_TABLE.charAt((int) (n % base)));
  34.     }

  35.     public void printInts(long n, int base) {
  36.         //输入的base<16;
  37.         if (base <= 1 || base > MAX_BASE) {
  38.             System.err.println("cannot print int base" + base);
  39.         } else {
  40.             if (n < 0) {
  41.                 n = -n;
  42.                 System.err.println("-");
  43.             }
  44.             printIntRec(n, base);
  45.         }
  46.     }
  47.     /**
  48.      * 总结:递归程序总是可以用栈迭代地实现.
  49.      * 递归总是可以用栈代替,为了节约空间,有时需要这样做.
  50.      */
  51. }
数据结构 | 阅读 4362 次
文章评论,共2条
leiyfan
2008-10-18 22:02
1
大侠,牛B <br />
我想找个关于递归的解释很久了.<br />
呵呵 我一直不太会用递归.一直回避这个.看了你的这个我觉得好象清楚了一些 .感谢感谢
有敌手
2008-10-20 09:54
2
我自己归纳的递归,其核心思想就是 进层和退层,把这个搞清楚后递归就显得清晰了
游客请输入验证码
浏览4362次
文章归档