按要求设计递归算法。只需写出伪代码或画流程图,不需语言实现,但算法必须完整清晰。
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等需要标记清楚。
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中了,难道你不会输出一个数组吗?
酒店与多个循环,分支控制结构,以确定如何在控制台输出三角形,倒三角形,等边三角形,等腰三角形练习,正方形,长方形,平行四边形,菱形,另一个是大多形状。和尽可能从用户输入的参数来完成图形输出程序的适应。
包装 - 被转移到不同凡响,搜索算法学习练习,如:递归算法,帕斯卡三角形,冒泡,快速插入排序算法,如运动。
- 以后,你可以学习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图
度量
时间复杂度
空间复杂度
从思路上分类
- 穷举
- 递推
- 递归
- 分治
- 概率
- 动态规划
- 贪心算法
- 迭代
- 回溯法
- 分支限界法
- 基数估计算法
- 蚁群算法
- ...
从应用领域分类
- 基本算法
- 数据结构相关算法
- 几何算法
- 图论算法
- 规划算法
- 数值分析算法
- 加密解密算法
- 排序算法
- 查找算法
- 并行算法
- 数论算法
- ...
以上是关于按要求设计递归算法。只需写出伪代码或画流程图,不需语言实现,但算法必须完整清晰。的主要内容,如果未能解决你的问题,请参考以下文章