VC++数组问题递归与非递归源码+流程图
需求分析
编写具有如下函数原型的递归与非递归两种函数f,负责判断数组a的前n个元素是否从大到小完全有序了,是则返回true,否则返回false。并编制主函数对它们进行调用,以验证其正确性。
bool f(int a[], int n);
2. 概要设计
(1)非递归函数中只需逐对地判断各a[i]与a[i+1]是否都已从大到小有序排列(i = 0,1,…,n-2)。
(2)递归函数中将问题分解处理为:若n=1(即只有1个元素时)则返回true而递归出口;n>1时,若最后一对元素不顺序则返回false,否则进行递归调用(传去实参a与 n-1,去判断前n-1个元素的顺序性),并返回递归调用的结果(与前n-1个元素的是否顺序性相同)。
程序流程图:
3. 详细设计与编码
程序最主要的是以下两点:
(1) int *a=(int*)malloc(length *sizeof(int));
printf("请输入数组元素:\n");
for(int i=0; i<length;i++)
scanf("%d",&a[i]);
(2) bool f(int a[],int n) //非递归算法
{
原文请找腾讯752018766辣,文-论'文.网http://www.751com.cn/ if (a[i]<a[i+1])
{
t=false;
}
return t;
}
bool f1(int a[],int n) //递归算法
{
if(n==0)
return true;
else
{
if(a[n]>a[n-1])
return false;
else return f1(a, n-1);程序运行结果:
4 . 调试分析:
调试过程中并没有遇到太大的阻力,主要是因为刚开始没有想到设计中的第(2)部分,后来想到后再来实现它就不是很困难了。
5 . 用户使用说明:
运行程序,用户输入数组的长度,然后分别输入数组的元素,程序会自动判断输入的数组是否符合要求,输出true或者false。
6 . 设计心得:
这个程序并不难,主要是有些方面想到想不到的问题,想到了就很简单做了出来,想不到就回感觉很棘手,程序实现的功能较少,所以程序代码也不会太多,因此还是很简短很简单的一个程序的。1605