題目要求
有以下程序
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");
}
覈對結果
和分析得一樣,思路還是非常清晰的