小透明也有愿望 2023-02-20 20:21 采纳率: 55.6%
浏览 30

为什么输出的会是654321


#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");
}
  • 写回答

4条回答 默认 最新

  • Huazie 全栈领域优质创作者 2023-02-20 20:35
    关注

    递归,我们一步步来看:

    • 首先 你这函数定义有问题 ,参考评论完整修改

    详细分析如下:

    • 首先 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
    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 2月20日
  • 创建了问题 2月20日

悬赏问题

  • ¥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代码 关于微分方程和嵌套的分段函数。