按要求设计递归算法。只需写出伪代码或画流程图,不需语言实现,但算法必须完整清晰。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了按要求设计递归算法。只需写出伪代码或画流程图,不需语言实现,但算法必须完整清晰。相关的知识,希望对你有一定的参考价值。

以递归算法生成以下整数数组,每组包含四个元素,第一个元素(序号为0)都为0,往后是所有以3或4连续相加的可能情况,生成后以序号靠前的元素的大小从小到大排序。

输出示例:[0, 3, 6, 9], [0, 4, 7, 10], [0, 4, 8, 11] ... →排序→[0, 3, 6, 9], [0, 3, 6, 10], [0, 3, 7, 10], [0, 3, 7, 11] ...。

不要求语言实现,只需写出伪代码或画出流程图,但算法必须完整清晰。伪代码必须包含算法结构用词,如 (不限于也可以不用) while for else等,if和end if等需要标记清楚。

arrs[100000][100000];
a[100000];
f(i,zhi)
if(i==4)
arrs[]=a;
return;

a[i]=zhi;
f(i+1,zhi+3);
f(i+1,zhi+4);

f(0,0)
arrs就是结果,并且是排了序的。追问

谢谢解答,但这种方法看的不太明白,可能比较抽象,不懂这里面循环体是哪里开始哪里结束,f()的调用是怎样实现生成和排序的。能否用do for while等方法的语言大概是Java的格式再写一遍伪代码或者解释下为什么是这样的呢?

追答

java代码就不用写了,你的问题是不懂什么情况使用递归,怎样的逻辑才算递归。
如果我求得固定第一位后的数组,那么全部数组就可以求出
如果我求得固定第二位后的数组,固定第一位后的数组就可以求出,固定第二位有两种可能
。。。
如果我求得固定第四位后的数组,固定第三位后的数组就可以求出,固定第四位有两种可能
这很明显是递归的算法。
arrs[100000][100000];
a[100000];
f(i,zhi)//i是数组个数,zhi是每一位要确定的值
if(i==4)//说明数组个数是4了,完成了
arrs[]=a;//将数组赋给另外一个大数组
return;

a[i]=zhi;//确定i位的值
f(i+1,zhi+3);//求得确定i位后,i+1的值为zhi+3的所有数组
f(i+1,zhi+4);//求得确定i位后,i+1的值为zhi+4的所有数组
//上两步的总和就是确定i位后的全部数组

f(0,0)

追问

谢谢,明白了一些。哪里要用递归过程是理解的,但就是不太能理解这个伪代码是在做些什么,跟题目要求的输出示例有什么联系。好像这里还没有包括到确定每个元素的值的过程呢。

用C或者其它语言也可以,能否做出代码来呢?或许这样就全都理解了。会有追加分的。

追答

你想通过代码找出别人的思路,而不是根据思路来理解别人的代码,这个方向是错误的。即使给你几天弄懂了代码,但是,你还是不懂递归的,如果再遇到无限极分类,全排列,八皇后,汉诺塔等这些问题时,你还是迷糊的。

而先知道递归思路,写出代码是很容易很容易的事,如果自己都没有思路,看了也是白看。递归思路怎样获得呢,谭浩强已经说的很明白了,就是不断将问题分解,也就是先整体,后局部,局部又可按照整体的划分法。例如这道题就是将求数组的集合这个问题不断分解,先分解为求得固定第1位的集合,然后分解为固定第2位的集合。。。我都说的很明白嘛。你自己首先要认同这个思路,然后再将这个思路和代码结合起来。你还是先看看汉诺塔问题或者全排列问题先吧。
其次,这代码和java,c没什么不同,就这句arrs[]=不同,我是用php写的。a[i]=zhi;这句不就是确定值吗?

最后,那个函数将所有结果都保存在arrs中了,难道你不会输出一个数组吗?

参考技术A 开始的程序控制语句的基础练习,如开头:

酒店与多个循环,分支控制结构,以确定如何在控制台输出三角形,倒三角形,等边三角形,等腰三角形练习,正方形,长方形,平行四边形,菱形,另一个是大多形状。和尽可能从用户输入的参数来完成图形输出程序的适应。

包装 - 被转移到不同凡响,搜索算法学习练习,如:递归算法,帕斯卡三角形,冒泡,快速插入排序算法,如运动。

- 以后,你可以学习Swing桌面开发的基本知识。使用Swing良好的设计,进一步学习Java语言来实现各种设计模式,比如Swing是最常见的模式,观察者模式,单例模式,工厂模式,抽象工厂模式,等等。以后有限公司返回了,你可以学到一些知识的J2EE,如JSP,Servlet的,以及一些常用的框架如Hibernate,Spring中,Struts中,TopLink的,ibitas,DWR等上。

这些只是Java的知识,要想J2EE,还要学习html,JS,XML,CSS,AJAX和一些常见的富客户端框架库,如原型,ExtJS的,JQuery的,等。许多

学习内容,要循序渐进,以达到良好的效果。否则你不会得到一半。需要注意的是学习的过程中必须采取一些好的经验(设计模式是公认的获得经验)学习,所以能迅速提高。

算法总结

算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。

特性

  • 输入
  • 输出
  • 有穷性
  • 确定性
  • 可行性

好的算法应该是易于理解(抽象升级),正确高效。

描述方式

  • 自然语言
  • 流程图
  • 程序设计语言
  • 伪代码
  • N-S图

度量

  时间复杂度

       空间复杂度

从思路上分类

  • 穷举
  • 递推
  • 递归
  • 分治
  • 概率
  • 动态规划
  • 贪心算法
  • 迭代
  • 回溯法
  • 分支限界法
  • 基数估计算法
  • 蚁群算法
  • ...

从应用领域分类

  • 基本算法
  • 数据结构相关算法
  • 几何算法
  • 图论算法
  • 规划算法
  • 数值分析算法
  • 加密解密算法
  • 排序算法
  • 查找算法
  • 并行算法
  • 数论算法
  • ...

 

以上是关于按要求设计递归算法。只需写出伪代码或画流程图,不需语言实现,但算法必须完整清晰。的主要内容,如果未能解决你的问题,请参考以下文章

算法采用递归方式实现按升序排序的选择排序算法(C++源码)

算法可以使用哪些描述方式,各有啥优势?

算法总结

如何在LaTeX里打出这样的伪代码呢,主要是 这样的行号显示 以及 4,5两行的换行缩进 怎么实现

算法 入门

第04次作业-树