`

递归生成降序数列

Go 
阅读更多

题目:

从键盘输入两个自然数N,R(N>R),要求输入从N到1中按降序顺序取R个自然数的

所有组合个数。
输入:N=5,R=3
输出:543,542,541,532,531,521,432,431,421,321
Total=10

 

回答:

这类题其实都是n个数中取m个数的所有组合衍生

 

public class Test {
	public static void main(String args[]) {
		new Test().go(5, 3);
	}
	
	public void go(int startnumber, int length) {
		for(int i = startnumber; i >= length; i--) {
			generate("", i, length);
		}
	}

	public void generate(String prenumber, int startnumber, int length) {
		if(length == 2) {
			for(int i = startnumber - 1; i > 0; i--) {
				System.out.println(prenumber + startnumber + "" + i);
			}
		} else {
			for(int i = startnumber - 1; i >= length - 1; i--) {
			    generate(prenumber + String.valueOf(startnumber), i, length - 1);
			}
		}
	}
}

 

递归的话定义一个嵌套循环
generate(5, 3) = 5 + generate(4, 2)
  5 + generate(3, 2)
  5 + generate(2, 2)
而generate(startnumber, length)
在这里的概念是生成以startnumber为起始的length个数的所有序列

分享到:
评论

相关推荐

    排序(快速排序、堆排序等)

    - 冒泡排序是一种简单的排序算法,它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。 **实现原理**: - 比较相邻的元素。如果第一个比第二个大,就交换它们两个。 - 对每一对...

    2019js数组前端经典算法面试题.docx

    在给定的代码中,使用了循环来生成斐波那契数列,这是一种更高效的实现方式。代码首先初始化一个空数组 `Fibonacci`,然后通过循环将前20个斐波那契数填入数组。最后,使用 `reduce` 方法对数组求和。 第二个问题...

    西南交通大学计算机程序设计基础C++实验九.pdf

    5. **斐波那契数列**:斐波那契数列是一个典型的递归序列,其中每一项等于前两项之和。实验要求生成斐波那契数列的前10项并存储在数组中。 6. **动态插入排序**:在已排序的数组中插入新的元素,同时保持数组有序。...

    数据结构习题集答案(c版)(清华大学严蔚敏).doc

    在这个例子中,它比较并交换x、y和z,确保最后输出的顺序是降序的。 2. **斐波那契数列**:1.17题的`fib`函数用于计算斐波那契数列的第m项。斐波那契数列是一个数列,其中每个数字是前两个数字的和,通常以0和1开始...

    华为、大唐电信等数100家全球知名IT公司经典面试题

    3. 波那其数列(斐波那契数列)问题:波那其数列是每个数等于前两个数之和。要求第十项,可以直接计算,也可以用递归。递归方法虽然直观,但效率较低,因为它会重复计算很多相同的子问题。非递归方法如动态规划或...

    经典算法(java、c语言描述)

    9. **递归**:是许多算法的基础,如阶乘计算、斐波那契数列、深度优先搜索等。递归通过调用自身解决问题,但需注意避免无限递归和效率问题。 10. **字符串处理**:如KMP算法、Rabin-Karp滚动哈希、Boyer-Moore算法...

    笔试中常见编程题.doc

    12. 费波那契数列:递归法简单直观,但效率低;非递归法如动态规划或迭代法效率更高,避免了重复计算。 13. 实现atoi函数:将字符串转换为整数,需要处理负号、非数字字符等情况。 14. 计算字符串中A的个数:遍历...

    46家知名企业面试题

    - 第一题是生成一个星号(*)图案,这涉及到循环控制和字符串输出。在`main()`函数中,需要使用嵌套循环来实现这个图案。外层循环控制行数,内层循环控制每行的星号数量。这里可以使用两个嵌套的for循环,外层控制...

    VB编程题及答案.pdf

    30. **杨辉三角**:输出多行的杨辉三角,涉及递归或循环生成二项式系数。 31. **数组元素交换**:交换二维数组的两行,需要对数组的行进行操作。 32. **大写字母生成**:随机生成大写字母,使用字符编码转换。 33. *...

    实验5 - 副本.docx

    使用`random`库生成两个随机整数`x`和`y`,然后调用`f(x, y)`并输出结果。 3. **排序输出**: 这一部分展示了如何将整数的每一位数字进行降序排序。首先定义函数`f(m)`,将输入的整数转换为字符串`s`,然后对`s`的...

    数据结构课后习题算法.

    在这个例子中,我们通过比较并交换x、y、z的值,确保最终的输出是按照降序排列的。这个算法的时间复杂度为O(3),由于只有三元素,所以是线性的。 接着,题目1.17涉及到了斐波那契数列的计算。斐波那契数列是这样一...

    vb常用算法集(汇总)

    例如,阶乘计算、汉诺塔问题、斐波那契数列等都可以用递归方式实现。 8. **数据结构**:VB中的数据结构包括数组、列表、链表、栈、队列、哈希表等。理解如何高效地使用这些数据结构对于优化算法性能至关重要。 9. ...

    一些常见的算法的解题报告.zip

    - 最长公共子序列:寻找两个序列中最长的不降序子序列。 - 矩阵链乘法:优化矩阵乘法的运算顺序,降低计算复杂度。 5. **贪心算法**: - Huffman编码:用于数据压缩,通过贪心策略构建最优的二叉树。 - 最小...

    各种算法的Flash演示

    这些算法用于调整数据序列,使之按照某种规则(如升序或降序)排列。Flash演示可以帮助我们清晰地看到元素如何在排序过程中移动,从而理解每种排序算法的时间复杂度和空间效率。 2. **查找算法**:例如线性查找、二...

    C语言编程题精选.docx

    排序问题,冒泡法和选择法都是常见的排序算法,需要实现相应的逻辑来完成升序或降序排列。 32. 统计英文单词个数,需要了解字符串处理,特别是空格作为分隔符的情况。 33. 计算n的阶乘,递归方法是从1乘到n,基础...

    Classpath.zip

    1. **起泡排序**:这是一种简单的交换排序方法,通过重复遍历待排序的数列,比较相邻元素并根据需要交换它们,使得较大的元素逐渐“浮”到数列的末尾,就像水中的气泡最终会上升到水面一样。 2. **快速排序**:由C....

    Java练习题,实用于Java大部分人群

    - 使用循环结构生成并打印数列中的每一项。 #### 11. 数字反转 - **知识点**:将一个整数的位顺序颠倒。 - **实现方法**: - 将整数转换为字符串。 - 使用字符串操作(如反转)改变数字顺序。 - 再次转换回整数...

    数据结构习题答案(全部算法)---严蔚敏版1到5章

    以上四个知识点涵盖了数据结构与算法的基本概念和技术实现细节,包括排序算法、斐波那契数列的高效计算、体育比赛成绩的处理以及特定序列的生成等。这些内容对于理解和掌握数据结构与算法具有重要意义。

    C语言常用算法源代码

    - 递归:函数调用自身,如Fibonacci数列、阶乘计算等。 - 分治:将大问题分解为小问题,解决后再合并结果,如快速排序、归并排序。 学习并熟练掌握这些算法的C语言实现,不仅有助于提升编程技能,还能培养解决...

    public class Aa.docx

    - **递归调用**:快速排序算法的核心在于递归调用自身,通过不断地划分子数组,直到子数组中只剩下一个元素或没有元素为止。 以上就是从给定文档中提取的主要IT知识点。这些知识点涵盖了Java编程的基础语法、数组...

Global site tag (gtag.js) - Google Analytics