`
meiowei
  • 浏览: 147094 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

转:递归解整数分划问题

阅读更多

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<n)
       Q(n,m-1)表示被加数中不包含m的分划数目;
        Q(n-m,m) 表式被加数中包含m的分划数目。

4. java实现:

/**
 * @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
 
分享到:
评论

相关推荐

    用递归算法实现整数逆序

    ### 用递归算法实现整数逆序 #### 背景与意义 在计算机科学领域,递归算法是一种常用且强大的技术手段。通过将问题分解为更小规模的子问题来解决,递归能够有效地简化复杂度较高的计算任务。本篇文章主要探讨如何...

    C语言编程训练:递归-整数分解为素因子乘积

    【问题描述】 把一个大于4的合数分解为若干个素数乘积。素因子从小到大顺序输出。 【输入形式】 每个输入包含一个测试用例,即正整数N。 【输出形式】 按素因子从小到达顺序输出。 【样例输入】 24 【样例输出】...

    整数的分划问题 递归程序

    根据给定文件的信息,我们可以总结出以下关于“整数的分划问题 递归程序”的详细知识点: ### 整数的分划问题简介 整数的分划问题是指将一个正整数\( n \)表示为一系列正整数之和的形式,即: \[ n = n_1 + n_2 + ...

    c语言 二叉树应用:创建、递归非递归遍历、计算结点、分支、交换子树

    递归先序遍历二叉树: 递归中序遍历二叉树: 递归后序遍历二叉树: 非递归先序遍历二叉树: 非递归中序遍历二叉树: 非递归后序遍历二叉树: 非递归中序遍历二叉树(算法2): 层次遍历二叉树: 递归计算单...

    简单的C语言程序 递归逆序整数

    - 每次递归调用都向问题解靠近一步,直到达到基本情况(即终止条件)。 ### 程序分析 #### 1. 程序目标 该程序的主要功能是接收用户输入的一个整数,并通过递归的方式将该整数逆序输出。 #### 2. 函数解析 - *...

    Python语言基础:递归函数.pptx

    这个过程展示了递归如何通过不断分解问题来逼近解决方案,然后通过返回值合并这些解,最终得到`5! = 120`的结果。 总的来说,递归函数是Python编程中一个强大的工具,它能够优雅地解决某些问题。然而,使用递归时应...

    整数因子分解问题的递归算法

    问题描述: 大于1 的正整数n可以分解为:n=x1*x2*…*xm。 算法设计: 对于给定的正整数n,编程计算n共有多少种不同的分解式。 例如,当n=12 时,共有8 种不同的分解式: 12=12; 12=6*2; 12=4*3; 12=3*4; 12=3*2*...

    C 语言程序设计:递归与分治策略.ppt

    递归是一种算法设计技术,通过将问题分解成更小的子问题,并递归地解决这些子问题来解决原问题。分治策略是将问题分解成更小的子问题,并将这些子问题的解决方案组合起来以解决原问题。 学习要点: * 理解递归的...

    事业单位考试计算机基础知识:递归算法之解决问题的特点.docx

    在计算机科学领域,递归算法是一种强大的问题解决方法,它基于函数或过程在执行过程中调用自身的技术。在事业单位考试的计算机基础知识部分,理解和掌握递归算法的特点至关重要。以下是递归算法的一些关键点: 1. *...

    C语言编程训练:递归-分解整数为若干个素数之和

    【问题描述】 把一个大于4的整数分解为若干个素数之和。按照从小到大顺序输出,并统计有多少种分解方法。对于同构的分解只输出一次(比如5只有一个分解2 + 3,而3 + 2是2 + 3的同构分解式)。用递归函数实现 【输入...

    程序员必备的基本算法:递归详解.pdf

    在IT行业中,算法是程序员解决问题的关键工具之一,而递归是算法中的一种重要概念。递归是指函数或程序调用自身的过程,它通常用于解决具有相同结构的问题子集。理解并掌握递归对于任何程序员来说都是必备技能。 ...

    递归输出整数_C语言简单程序_递归实现输出整数_

    在编程领域,递归是一种强大的技术,它允许...总结来说,递归输出整数是C语言中一个有趣的练习,它展示了如何利用递归解决实际问题。通过递归函数,我们可以轻松地按位顺序输出任何整数,同时加深对递归原理的理解。

    C++语言程序设计:递归与分治策略.ppt

    分治策略是将大问题分解为若干个相同或相似的小问题,然后对这些小问题进行递归求解,最后将所有子问题的解组合起来得到原问题的解。这个过程通常分为三个步骤: 1. **分解**:将原问题分解为若干个规模较小但结构...

    acm递归算法总结竞赛

    对于某些问题,迭代解可能比递归解更有效率。 6. **回溯法**:在ACM竞赛中,递归常用于回溯法,如解决迷宫问题、八皇后问题等,通过尝试所有可能的路径并回溯来找到解决方案。 7. **动态规划与记忆化**:为了优化...

    java基础编程:递归思想求解第5个人的年龄问题

    java基础编程:递归思想求解第5个人的年龄问题

    数据结构:第6章 递归.pdf

    递归函数可以将复杂的问题分解成更小的子问题,直到解决最简单的子问题,从而解决整个问题。递归算法广泛应用于数据结构、算法设计、动态规划等领域。 数据结构是计算机科学中研究如何存储、组织和处理数据的学科。...

    一些常见的递归示例: 计算阶乘 斐波那契数列 递归遍历树结构

    在 C 语言中,递归常用于解决那些可以被分解为更小的相同问题的任务。递归通常包括两个主要部分: 递归基准条件:这是递归停止的条件,用于防止无限递归。 递归步骤:函数调用自身来解决更小的子问题。 注意事项 ...

    2020年计算机等级VB语言核心知识点:递归过程.docx

    递归是通过自身调用来解决复杂问题的一种方法,它的基础在于将大问题分解为相同或相似的小问题来处理。在VB中,递归可以应用于自定义的子过程和函数。 1. 递归的概念 递归的核心思想在于“用自身的结构来描述自身”...

    递归法将整数转换为字符串.zip

    递归是一种解决问题的方法,它通过调用自身来解决更小规模的子问题,直到达到基本情况,从而解决整个问题。在将整数转换为字符串的过程中,我们可以将一个大整数分解为较小的数字,然后逐个将其转换为字符。 以下是...

Global site tag (gtag.js) - Google Analytics