刚才看到一位仁兄问递归的问题,我昨天正好又看到了Command模式,于是我想能否用Command模式降低递归的门槛呢?废话少说,看代码: // 先定义递归所需接口
public interface Recursive
{
public void recursiveForward(Object init);
public Object recursiveStep(Object in);
public Object recursiveReturn();
public boolean exitCondition();
} // 再定义Command模式类
public class RecursiveCommand
{
private Recursive m_rec;
public RecursiveCommand(Recursive rec)
{
m_rec = rec;
}
public Object doCommand(Object init)
{
if (m_rec.exitCondition())
return null;
else
{
m_rec.recursiveForward(init);
init = m_rec.recursiveStep(init);
doCommand(init);
return m_rec.recursiveReturn();
}
}
}有了这两个东西,大家只要是实现了Recursive接口的类都能拿到RecursiveCommand类中进行递归计算,我自己已经写了一个小程序来验证这个小东西,有兴趣的可以看看后面的代码,不过我的初衷还是希望大家看看这个接口和RecursiveCommand类设计得是否合理,想的不成熟,还请大家踊跃拍砖!附:
验证代码:
public class Factor implements Recursive
{
private int m_factor;
private int result = 1;

public Factor(int factor)
{
m_factor = factor;
}

public void recursiveForward(Object in)
{
result *= ((Integer)in).intValue();
m_factor--;
}

public Object recursiveStep(Object in)
{
int inValue = ((Integer)in).intValue();
return new Integer(--inValue);
}

public boolean exitCondition()
{
if (m_factor <= 0)
return true;
else
return false;
}

public Object recursiveReturn()
{
return new Integer(result);
}
}public class SystemEntrance
{
public static void main(String[] args)
{
SystemEntrance se = new SystemEntrance();
Factor fac = new Factor(6);
RecursiveCommand rc = new RecursiveCommand(fac); Object objResult = rc.doCommand(new Integer(6)); System.out.println(objResult.toString());
}
}

解决方案 »

  1.   

    谢谢zebra007(呼呼),更需要板砖的说
      

  2.   

    以前在.NET版混的时候就只有解决语法错误的兄弟,难道JAVA版也只有解决这些轻量级问题的“大牛”了?真正能够深入探讨技术的大牛都去哪了?一个关于算法和模式的简单讨论都这么冷清,从基础版(我看其人气足一点)转到架构,又从架构转回来,除了两个热心的兄弟帮忙顶以外竟然没有一个进来好好说几句,哪怕是否定的,反面的都行呀!无奈!
      

  3.   

    偶也初来java版,up一下
    提两个问题:
    1.  如何计算 Fibonacci 数列?
    2.  如何计算 算法复杂度, 在o(n3) 下面 系统的开销可能会是多少,以 n = 1k 估算一下,当中的内存变量,参数 and so on?回答了第一道题就知道递归不只是一种形式。它有很多很复杂的形式。很难统一在一起,
    所以doCommand是需要开放的。回答了第二道题就知道,在递归中做任何多余的动作或者开销都会引起类似蝴蝶效应这样的效应(有时候比指数增长还恐怖)。
    特别是在递归层次比较深的递归中。