关于C语言的问题。请高手帮忙!

其实我就是想做一个简单的递归调用。高手给解答一下~知道程序肯定有问题,就是不知道问题出在哪里。
#include<stdio.h>
compare(int a,int b)
{ int m;
if (a<b)
m=a;a=b,b=m;
return(0);
}
main()
{ int a[10],i;
printf("请输入一组数据:\n");
scanf("%d\n",&a[9]);
{for(i=0;i<10;i++)
compare(a[i],a[i+1]);}
}
我错了,这不是递归~~这只不过是反复调用一个函数布局.
哪位同学给介绍一下一般哪里用递归最多?

//递归调用是那种计算后面的可以根据前面的来,就是类似高中时候学过的数列吧
表现为函数内部有自己函数的调用
比如 F(n)=F(n-1)+F(n-2) F(0)=0 F(1)=1
int f(int n)
{
if(n<2)return n;
return f(n-1)+f(n-2);//调用自己的函数,递归调用
}

不知道你的递归调用是什么意思?是对数组进行从大到小排序还是?我先帮你修改一下一些小错误,你可以再给我说说详细的要求。

#include<stdio.h>
int compare(int a,int b) //因为返回0为整型
{ int m;
if (a<b) //你是要当a<b时候交换a,b的值吧,判断条件内部有多条语句应该加上大括号
{m=a;a=b,b=m;}
return(0);
}
main()
{ int a[10],i;
printf("请输入一组数据:\n");
for(i=0;i<10;i++)//每次输入一个数
scanf("%d\n",&a[i]);
for(i=0;i<10;i++)
compare(a[i],a[(i+1)%10]); //防止数组下标越界
//你这里交换compare因为是传指而不是地址,所以交换没有用
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-04-07
你获取数据的时候只是获取的a[9]的,其它的数据时未知的》。。。。。至于后边的比较函数调用,是递归吗??不太清楚,看上更像是连续调用......
http://baike.baidu.com/view/96473.html?wtp=tt 递归的定义等等 见百度百科
第2个回答  2011-04-07
首先,你这个不是递归,只是反复的函数调用,递归函数建议你再去理解下
compare(int a,int b);// compare(int *a,int *b)
{ int m;
if (*a<*b)
m=*a;*a=*b,*b=m;
return(0);
}

{for(i=0;i<10;i++)
compare(a[i],a[i+1]);} //compare(&a[i],&a[i+1]);
第3个回答  2011-04-07
#include<stdio.h>
compare(int a,int b)
{ int m;
if (a<b)
{m=a;a=b,b=m;}//这里要加大括号,具体原因就不用说了吧
return(0);
}
main()
{ int a[10],i;
printf("请输入一组数据:\n");
scanf("%d\n",&a[9]);
{for(i=0;i<10;i++)
compare(a[i],a[i+1]);}
}
第4个回答  2011-04-07
首先 你这个不是递归吧
你难道要做的是把最小的移动到最后一个?

#include<stdio.h>

compare(int *a,int *b)
{ int m;
if (*a<*b)
{
printf("\na=%d,",*a);
printf("b=%d",*b);
m=*a;*a=*b,*b=m;
printf(" true ");
printf("a=%d,",*a);
printf("b=%d\n",*b);
}
return(0);
}

main()
{ int a[10],i;
printf(" please enter a array number:\n");
for(i=0;i<10;i++)
{
scanf("%d\n",&a[i]);
}

for(i=0;i<10;i++)
compare(&a[i],&a[i+1]);

for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
getch();
}

你可以试试
相似回答