为了账号安全,请及时绑定邮箱和手机立即绑定

c语言的递归问题

c语言的递归问题

C C# C++
kathria 2017-03-24 16:29:19
有以下程序#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,谁能解释一下程序怎么运行的,我不能理解这里的递归
查看完整描述

3 回答

?
三十二应遍尘刹

TA贡献22条经验 获得超7个赞

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],就是这个数组中第二个元素的地址,依次类推!如果这个你知道那也没啥难得了吧,如果看不懂,请你看一看数组与指针的关系就行了

查看完整回答
1 反对 回复 2017-03-26
?
asd8532

TA贡献143条经验 获得超187个赞

传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 4

6和1进去,直接输出6然后退出4 5 6 5 4

查看完整回答
1 反对 回复 2017-03-24
  • kathria
    kathria
    这分别是哪个x【0】的输出;使用了else的print吗
  • asd8532
    asd8532
    传456,x0就是4 传56,x0就是5
  • kathria
    kathria
    f(&x[1], n-1); printf("%d,", x[0]); 每执行一遍递归,下面的print是每次都输出一次,还是在最后的时候输出一次?
  • 3 回答
  • 0 关注
  • 2027 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信