[讨论]关于递归的一点想法
刚才看到一位仁兄问递归的问题,我昨天正好又看到了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());
}
}