c语言的递归问题

有以下程序


#include <stdio.h>

void f(int x[], int n)

{  if ( n > 1) 

   {   printf("%d,", x[0]); 

       f(&x[1], n-1);

       printf("%d,", x[0]); 

   }

   else

     printf("%d,", x[0]);

}

main( )

{   int z[3] = {4, 5, 6};

    f(z, 3);    

    printf("\n"); 

}


程序运行后的输出结果是



A)  6,5,4,6,5,4,


B)  4,5,6,5,4,


C)  4,5,6,4,5,6,


D)  6,5,4,5,6,

谁能解释一下程序怎么运行的,我不能理解这里的递归

kathria
浏览 2123回答 3
3回答

三十二应遍尘刹

void f(int x[], int n){  if ( n > 1)    {   printf("%d,", x[0]);        f(&x[1], n-1);       printf("%d,", x[0]);    }你应该是f(&x[1],n-1);这里的递归调用有疑惑吧,其实数组在内存中是以指针的形式存在的,int x[],数组名x代表了它的首地址,&是取地址符,&x[1],就是这个数组中第二个元素的地址,依次类推!如果这个你知道那也没啥难得了吧,如果看不懂,请你看一看数组与指针的关系就行了

asd8532

传4,5,6和3进去输出x[0]和x[0],两个x[0]中间调用递归,所以两个4中间有一些输出输出4.。。。。。4传5,6和2进去输出x[0]和x[0],两个x[0]中间调用递归,所以两个5中间有一些输出4 5.。。。5 46和1进去,直接输出6然后退出4 5 6 5 4
打开App,查看更多内容
随时随地看视频慕课网APP