题目要求
有以下程序
void f(int a[],int i,int j)
{ int t;
if(i<j)
{ t=a[i]; a[i]=a[j];a[j]=t;
f(a,i+1,j-1);
}
}
main( )
{ int i,a[5]={1,2,3,4,5};
f(a,0,4);
for(i=0;i<5;i++)printf(“%d,”,aa[i]);
printf(“\n”);
}
执行后输出结果是( )
思路分析
当看到这个题,就觉得有点不大好做,在函数f中,又调用了函数f,但是不好做不代表不能做,只看函数的前半部分,这是很熟悉,排序,而且元素是从大到小排序,接着有是调用 函数f 如果思维转换不过来,不妨手动写一写,看一看
第一次调用函数f时,int a[]={1,2,3,4,5}, int i=0,int j=4, 这个时候在函数f中应该是a[i]=1,a[j]=5, i<j,元素调换位置
第二次调用函数f时,int a[]={5,,2,3,4,1}, int i=1,int j=3,这个时候在函数f中应该是a[i]=2,a[j]=4,i<j,元素调换位置
第三次调用函数f时,int a[]={5,4,3,2,1}, int i=2,int j=2,这个时候不满足i<j,退出函数f
然后依次输出数组元素 应该为5 4 3 2 1
撸写代码
#include<stdio.h>
void f(int a[],int i,int j)
{
int t;
if(i<j)
{
t=a[i];
a[i]=a[j];
a[j]=t;
f(a,i+1,j-1);
}
}
int main( )
{
int i,a[5]={1,2,3,4,5};
f(a,0,4);
for(i=0;i<5;i++)
printf("%d,",a[i]);
printf("\n");
}
核对结果
和分析得一样,思路还是非常清晰的