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
分享到:
相关推荐
### 用递归算法实现整数逆序 #### 背景与意义 在计算机科学领域,递归算法是一种常用且强大的技术手段。通过将问题分解为更小规模的子问题来解决,递归能够有效地简化复杂度较高的计算任务。本篇文章主要探讨如何...
【问题描述】 把一个大于4的合数分解为若干个素数乘积。素因子从小到大顺序输出。 【输入形式】 每个输入包含一个测试用例,即正整数N。 【输出形式】 按素因子从小到达顺序输出。 【样例输入】 24 【样例输出】...
根据给定文件的信息,我们可以总结出以下关于“整数的分划问题 递归程序”的详细知识点: ### 整数的分划问题简介 整数的分划问题是指将一个正整数\( n \)表示为一系列正整数之和的形式,即: \[ n = n_1 + n_2 + ...
递归先序遍历二叉树: 递归中序遍历二叉树: 递归后序遍历二叉树: 非递归先序遍历二叉树: 非递归中序遍历二叉树: 非递归后序遍历二叉树: 非递归中序遍历二叉树(算法2): 层次遍历二叉树: 递归计算单...
- 每次递归调用都向问题解靠近一步,直到达到基本情况(即终止条件)。 ### 程序分析 #### 1. 程序目标 该程序的主要功能是接收用户输入的一个整数,并通过递归的方式将该整数逆序输出。 #### 2. 函数解析 - *...
这个过程展示了递归如何通过不断分解问题来逼近解决方案,然后通过返回值合并这些解,最终得到`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*...
递归是一种算法设计技术,通过将问题分解成更小的子问题,并递归地解决这些子问题来解决原问题。分治策略是将问题分解成更小的子问题,并将这些子问题的解决方案组合起来以解决原问题。 学习要点: * 理解递归的...
在计算机科学领域,递归算法是一种强大的问题解决方法,它基于函数或过程在执行过程中调用自身的技术。在事业单位考试的计算机基础知识部分,理解和掌握递归算法的特点至关重要。以下是递归算法的一些关键点: 1. *...
【问题描述】 把一个大于4的整数分解为若干个素数之和。按照从小到大顺序输出,并统计有多少种分解方法。对于同构的分解只输出一次(比如5只有一个分解2 + 3,而3 + 2是2 + 3的同构分解式)。用递归函数实现 【输入...
在IT行业中,算法是程序员解决问题的关键工具之一,而递归是算法中的一种重要概念。递归是指函数或程序调用自身的过程,它通常用于解决具有相同结构的问题子集。理解并掌握递归对于任何程序员来说都是必备技能。 ...
在编程领域,递归是一种强大的技术,它允许...总结来说,递归输出整数是C语言中一个有趣的练习,它展示了如何利用递归解决实际问题。通过递归函数,我们可以轻松地按位顺序输出任何整数,同时加深对递归原理的理解。
分治策略是将大问题分解为若干个相同或相似的小问题,然后对这些小问题进行递归求解,最后将所有子问题的解组合起来得到原问题的解。这个过程通常分为三个步骤: 1. **分解**:将原问题分解为若干个规模较小但结构...
对于某些问题,迭代解可能比递归解更有效率。 6. **回溯法**:在ACM竞赛中,递归常用于回溯法,如解决迷宫问题、八皇后问题等,通过尝试所有可能的路径并回溯来找到解决方案。 7. **动态规划与记忆化**:为了优化...
java基础编程:递归思想求解第5个人的年龄问题
递归函数可以将复杂的问题分解成更小的子问题,直到解决最简单的子问题,从而解决整个问题。递归算法广泛应用于数据结构、算法设计、动态规划等领域。 数据结构是计算机科学中研究如何存储、组织和处理数据的学科。...
在 C 语言中,递归常用于解决那些可以被分解为更小的相同问题的任务。递归通常包括两个主要部分: 递归基准条件:这是递归停止的条件,用于防止无限递归。 递归步骤:函数调用自身来解决更小的子问题。 注意事项 ...
递归是通过自身调用来解决复杂问题的一种方法,它的基础在于将大问题分解为相同或相似的小问题来处理。在VB中,递归可以应用于自定义的子过程和函数。 1. 递归的概念 递归的核心思想在于“用自身的结构来描述自身”...
递归是一种解决问题的方法,它通过调用自身来解决更小规模的子问题,直到达到基本情况,从而解决整个问题。在将整数转换为字符串的过程中,我们可以将一个大整数分解为较小的数字,然后逐个将其转换为字符。 以下是...