c语言用递归判断一个数组是递增还是递减

从屏幕输入一个数组然后判断是升序还是降序,升序就输出return1,降序输出-1,乱序输出0,代码越简单越好。老师说要用递归,而且10行以下就可以高手在哪... 从屏幕输入一个数组 然后判断是升序还是降序,升序就输出return 1,降序输出-1,乱序输出0,代码越简单越好。
老师说 要用递归,而且10行以下就可以 高手在哪
展开
 我来答
GodHlpMe
推荐于2017-11-25 · TA获得超过8456个赞
知道大有可为答主
回答量:4600
采纳率:46%
帮助的人:997万
展开全部
如果中间有相等 3,2,1,1,1,1, 0 ,这不算降序,算无序了!!!
我重新优化了一下,虽改了一点点,但效率提高了很多;
#include "stdio.h"
int order(int dat[ ],int n)
//升序就输出return 1,降序输出-1,乱序输出0
{
int t=dat[1]-dat[0];
int r=t>0?1:(t<0?-1:0);
if (r==0||n<=2) // r==0 时,不管N多少,都不再递归下去,这大大优化了
return(r);
int r1=order(dat+1,n-1);
return (r1==r?r:0);
} // 这递归算法仅六行,够短的了 !!!!
main()
{
int dat[ ]={1,4,2,6};
printf("%d",order(dat,4));
}
我用C++BUILDER6试过了,我的递归是正确的
兔子和小强
2013-06-14 · TA获得超过6946个赞
知道大有可为答主
回答量:3332
采纳率:74%
帮助的人:1423万
展开全部
#include <stdio.h>
/* ordered返回四个状态:2:常数列、1:递增、0:无序、-1:递减*/
int ordered(int *a, int n)
{
if(n == 1)return 2;
int t = (a[0]<a[1])-(a[0]>a[1])+2*(a[0]==a[1]),
order = ordered(a+1, n-1);
if(t*order == 0 || t*order == -1)return 0;//无序的情况
if(t > order)t = order;    //取min(t, order),使得常数列与有序数列连接,最后属性是有序数列
return t;
}
int main()
{
int i, n, a[256];
scanf("%d", &n);
for(i=0; i<n; i++)
scanf("%d", &a[i]);
i = ordered(a, n);
if(i == 2)
i = 1; //将常数列当做递增
printf("%d", i);
}
// Test
3 1 1 1 => 1    //第一个数表示元素个数,把常数列当做递增,所以输出1
3 1 2 3 => 1    //这是递增数列
3 2 2 3 => 1    //题目没有限制是严格递增或递减序列,把2 2 3这样的序列判别成无序是不合理的
3 1 2 1 => 0    //无序
3 3 2 1 => -1   //递减
3 3 2 2 => -1   //递减,类似地,把3 2 2判别成无序是不合理的,它是非严格递减序列
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lvzhe_hust
2013-06-14
知道答主
回答量:13
采纳率:0%
帮助的人:16.5万
展开全部
#include<stdio.h>
int check(int array[ ] , int n)
{
    if (n == 2)//两个元素直接比较并返回结果
        return array[1] > array[0]? 1 : -1;
    else//多个元素时要分成两个子问题,分别是1~(n-1)和(n-1)~n
    {
        int ret1;
        if ((ret1 = check(array, n - 1)) == 0)//如果1~(n-1)不是有序的那么直接给出结论
            return 0;
        //如果第一个子问题有序,那么要看和第二个子问题是否顺序与其一致
        int ret2 = array[n-1] > array[n - 2]? 1 : -1;
        if (ret1 == ret2)//如果一致给出结论
            return ret1;
        else
            return 0;//否则肯定是无序的
    }
}
int main ()
{
    int a[5] = {34, 35, 36, 37, 38};
    int ret = check(a, 5);
    printf("%d", ret);
    return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-06-14
展开全部
第归我想不出来.

#include<stdio.h>
#define Max 10
void main()
{
int fun(int a[],int n);
int a[Max],i,n,direct;
for(i=0;i<Max;i++)
scanf("%d",&a[i]);
/************************/
n=Max;
direct=fun(a,n);
printf("返回值 %d,",direct);
if(direct==-1)
printf("数组降序\n");
else if(direct==1)
printf("数组升序\n");
else
printf("数组无序\n");
}
int fun(int a[],int n)
{
int i,sum;
sum=0;
for(i=0;i<n-1;i++)
if(a[i]>=a[i+1])sum++;
if(sum==n-1)
return -1;
else
{
sum=0;
for(i=0;i<n-1;i++)
if(a[i]<=a[i+1])sum++;
if(sum==n-1)
return 1;
else
return 0;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
viqjatdw2011
2013-06-14 · 超过38用户采纳过TA的回答
知道小有建树答主
回答量:181
采纳率:0%
帮助的人:83.4万
展开全部
给你个思路

用递归进行排序
再然后在判断大小的if语句里加一个自增变量
如果自增变量==0 | ==9 返回1 或者-1 else 返回0
代码自己写
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式