2010-06-23 缩略显示
转:递归解整数分划问题
文章分类: 文章分类:Java 编程 1. 递归算法解题步骤 (1) 分析问题、寻找递归关系。找出大规模问题和小规模问题的关系。 (2) 找出停止条件,控制递归。 (3)
设计函数、确定参数。 2. 问题描述: 整数的分划问题。 如,对于正整数 n=6,可以分划为: 6 5+1 4+2, 4+1+1 3+3, 3+2+1, 3+1+1+1 2+2+2, 2+2+1+1, 2+1+1+1+1 1+1+1+1+1+1+1 现在的问题是,对于给定的正整数 n,编写算法计算出其分划得数目。 3.
问题分析和递归关系建立 从上面 n=6 的实际例子可以看出,很难找到大规模问题 P(n)和小规模问题 P(n-d)(d=1 或 2 或 3...)的关系。 根据 n=6 的实例发现"第一行及以后的数据不超过 6,第二行及以后的数据不超 过 5...,第六行的数据不超过 1"。 因此,定义一个函数 Q(n,m),表示整数 n 的"任何加数都不超过 m"的分划得 数目,n 的所有分划数目 P(n)就应该 表示为 Q(n,n). 一般地,Q(n,m)有以下递归关系: (1) Q(n,n) = 1+Q(n,n-1); (2) Q(n,m) = Q(n,m-1) + Q(n-m,m) (m
/** * @version v1.0 * */ public class IntegerDivision { /** * @param args */ public static void main(String[] args) { IntegerDivision id = new IntegerDivision(6); int count = id.divInteger(id.getN(), id.getN()); System.out.println(count); } private int n; public IntegerDivision(int _n) { n = _n; } /** * 递归求解 * * @param n * @param m * @return */ public int divInteger(int n, int m) { if (n < 1 || m < 1) { System.out.println("输出参数错误!"); } else if (n == 1 || m == 1) { return 1; } else if (n < m) { return divInteger(n, n); } else if (n == m) { return divInteger(n, n - 1) + 1; } else { return divInteger(n, m - 1) + divInteger(n - m, m); } return 0; } public int getN() { return n; } public void setN(int n) { this.n = n;
} } 运行: 11
11:36 浏览 (18) 评论 (0) 分类: JAVA_J2EE
2010-02-24 缩略显示
[转] Struts1 和 Struts2 的区别和对比
文章分类: 文章分类:Java 编程 Struts1 和 Struts2 的区别和对比: Action 类: Struts1 要求 Action 类继承一个抽象基类。Struts1 的一个普遍问题是使用抽 象类编程而不是接口。 Struts 2 Action 类可以实现一个 Action 接口,也可实现其他接口,使可选 和定制的服务成为可能。Struts2 提供一个 ActionSupport 基类去 实现 常用的 接口。Action 接口不是必须的,任何有 execute 标识的 POJO 对象都可以用作 Struts2 的 Action 对象。 线程模式: Struts1 Action 是单例模式并且必须是线程安全的,因为仅有 Action 的一个 实例来处理所有的请求。单例策略限制了 Struts1 Action 能作的事,并且要在 开发时特别小心。Action 资源必须是线程安全的或同步的。 Struts2 Action 对象为每
一个请求产生一个实例,因此没有线程安全问题。 (实际上,servlet 容器给每个请求产生许多可丢弃的对象,并且不会导致性能 和垃圾回收问题) Servlet 依赖: Struts1 Action 依赖于 Servlet API ,因为当一个 Action 被调用时 HttpServletRequest 和 HttpServletResponse 被传递给 execute 方法。 Struts 2 Action 不依赖于容器,允许 Action 脱离容器单独被测试。如果需 要,Struts2 Action 仍然可以访问初始的 request 和 response。但是,其他的 元素减少或者消除了直接访问 HttpServetRequest 和 HttpServletResponse 的 必要性。
可测性: 测试 Struts1 Action 的一个主要问题是 execute 方法暴露了 servlet API(这 使得测试要依赖于容器)。一个第三方扩展--Struts TestCase--提供了一 套 Struts1 的模拟对象(来进行测试)。 Struts 2 Action 可以通过初始化、设置属性、调用方法来测试,“依赖注入” 支持也使测试更容易。 捕获输入: Struts1 使用 ActionForm 对象捕获