#include<stdio.h>
void f(int x[],int n-1)
{
if(n>1)
{
f(&x[1],n-1);
printf("%d,",x[0]);
}
else printf("%d,",x[0]);
}
main()
{
int z[6]={1,2,3,4,5,6};
f(z,6);
primtf("/n");
}

为什么输出的会是654321
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
4条回答 默认 最新
关注
递归,我们一步步来看:
- 首先 你这函数定义有问题 ,参考评论完整修改
详细分析如下:
- 首先 f(z, 6) 压入栈;
- 进入f(z, 6),即 f(x, 6), n = 6, n > 1 , 进入 f(&x[1], 5) 压入栈 , 这里是把 x[1] 所在地址传入;
- 进入 f(&x[1], 5), n = 5, n > 1成立, 进入 f(&x[2], 4) 压入栈, 这里是把 &x[1] 作为首地址的数组,取对应的第二个元素的地址,也就是 &x[2];
- 进入 f(&x[2], 4),n = 4, n > 1成立, 进入 f(&x[3], 3) 压入栈,这里是把 &x[2] 作为首地址的数组,取对应的第二个元素的地址,也就是 &x[3];
- 进入 f(&x[3], 3),n = 3, n > 1成立, 进入 f(&x[4], 2) 压入栈,这里是把 &x[3] 作为首地址的数组,取对应的第二个元素的地址,也就是 &x[4];
- 进入 f(&x[4], 2), n = 2, n > 1成立, 进入 f(&x[5], 1) 压入栈,这里是把 &x[4] 作为首地址的数组,取对应的第二个元素的地址,也就是 &x[5];
- 进入 f(&x[5], 1), n = 1, n > 1 不成立,打印 x[5]元素,f(&x[5], 1) 出栈返回。
- 继续 f(&x[4], 2) 中,打印 x[4]元素,f(&x[4], 2) 出栈返回。
- 继续 f(&x[3], 3) 中,打印 x[3]元素,f(&x[3], 3) 出栈返回。
- 继续 f(&x[2], 4) 中,打印 x[2]元素,f(&x[2], 4) 出栈返回。
- 继续 f(&x[1], 5) 中,打印 x[1]元素,f(&x[1], 5) 出栈返回。
- 继续 f(z, 6)中,打印 x[0] 元素,f(z, 6) 出栈返回到 主函数。
- 最终打印 6 5 4 3 2 1
解决 无用评论 打赏 举报 编辑记录