#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
解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 静电纺丝煅烧后如何得到柔性纤维
- ¥15 (标签-react native|关键词-镜像源)
- ¥100 照片生成3D人脸视频
- ¥15 伪装视频时长问题修改MP4的时长问题,
- ¥15 JETSON NANO
- ¥15 VS开发qt时如何在paintgl函数中用pushbutton控制切换纹理
- ¥20 关于 openpyxl 处理excel文件地问题
- ¥15 MS中不知道高分子的构型怎么构建模型
- ¥60 QQOP数据,什么是op数据号,怎么提取op数据!能不能大量提取(语言-c语言)
- ¥15 matlab代码 关于微分方程和嵌套的分段函数。