[讨论]关于递归的一点想法

maksim_wei CTO  2005-09-06 02:00:04
刚才看到一位仁兄问递归的问题,我昨天正好又看到了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());
}
}
...全文
154 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
qinzaoxiaolan 2005-09-07
up
回复
sjjf 2005-09-07
偶也初来java版,up一下
提两个问题:
1. 如何计算 Fibonacci 数列?
2. 如何计算 算法复杂度, 在o(n3) 下面 系统的开销可能会是多少,以 n = 1k 估算一下,当中的内存变量,参数 and so on?

回答了第一道题就知道递归不只是一种形式。它有很多很复杂的形式。很难统一在一起,
所以doCommand是需要开放的。

回答了第二道题就知道,在递归中做任何多余的动作或者开销都会引起类似蝴蝶效应这样的效应(有时候比指数增长还恐怖)。
特别是在递归层次比较深的递归中。
回复
LongxiaoZeng2001 2005-09-07
学习!
再帮楼主顶一下!
双手和什,盼望高手现身!
回复
maksim_wei 2005-09-07
以前在.NET版混的时候就只有解决语法错误的兄弟,难道JAVA版也只有解决这些轻量级问题的“大牛”了?真正能够深入探讨技术的大牛都去哪了?

一个关于算法和模式的简单讨论都这么冷清,从基础版(我看其人气足一点)转到架构,又从架构转回来,除了两个热心的兄弟帮忙顶以外竟然没有一个进来好好说几句,哪怕是否定的,反面的都行呀!无奈!
回复
maksim_wei 2005-09-07
ft,难道是这个题目没有讨论的意义?为什么连一块板砖都没有?
回复
saiche05 2005-09-07
很好。

ing
回复
maksim_wei 2005-09-07
自己顶
回复
maksim_wei 2005-09-06
谢谢zebra007(呼呼),更需要板砖的说
回复
zebra007 2005-09-06
不错,顶一个
回复
发动态
发帖子
Java SE
创建于2007-09-28

6.1w+

社区成员

Java 2 Standard Edition
申请成为版主
社区公告
暂无公告