递归调用内幕 又不理解了 又看了下 其实就是函数返回值 位置问题

  • Post author:
  • Post category:其他


void up_and_down(int);

int main(void)

{


up_and_down(1);

return 0;

}

void up_and_down(int n)

{


printf(“level %d: n loacation %p\n”, n, &n);/

1

/

if (n < 4)

up_and_down(n + 1);

printf(“level %d: n loacation %p\n”, n, &n);/

2

/

}

将输出 1 2 3 4 4 3 2 1;

画图

在这里插入图片描述

由此可见,当调用函数时,将主程序代码行的下一条指令的地址保存到栈中;当函数返回时,程序就会从栈中获取该地址,并从那一点继续向下执行。在函数调用了其它函数的情况下,将每一个返回地址都放到栈中;当函数结束时,就可以找到它们在栈中的地址。



版权声明:本文为m0_46615101原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。