有以下程序: 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); } } mai

admin2013-02-23  31

问题 有以下程序:    void f(int a[],int i,int j)     {  int  t;    if(i<j)    {  t=a;a=a[j];a[j]=t;    f(a,i+1,j-1);    }    }    main()    {  int i,aa[5]={1,2,3,4,5};    f(aa,0,4);    for(i=0;i<5;i++)  printf("%d,",aa);    printf("\n");    }    执行后输出结果是(  )。

选项 A、5,4,3,2,1,
B、5,2,3,4,1,
C、1,2,3,4,5,
D、1,5,4,3,2,

答案1

解析 在C语言中所谓函数的递归是指在调用一个函数的过程中,又出现了直接或间接调用该函数本身,直接调用该函数本身的称为函数递归,而间接调用该函数称为函数的间接递归调用。由程序可以看出函数f(a,i,j)为一递归函数,其功能是当i<j时,将数组中的元素a和a[j]交换,然后再调用函数f(a,i+1,j-1),将数组中a[i+1]和a[j--]交换,这样一直递归到数组下标i=j,可见该递归函数的作用是使数组中首尾元素依次互换。主函数中定义了一个长度为5的数组aa并初始化,然后调用f(a,0,4),将数组a中的元素依次互换,故最后for循环输出的数组aa中各元素的值为5、4、3、2、1,所以,4个选项中选项A符合题意。
转载请注明原文地址:https://jikaoti.com/ti/pRB0FFFM
0

最新回复(0)