C语言 一道递归题

来源:百度知道 编辑:UC知道 时间:2024/07/04 12:25:13
#include "stdio.h"
fun(int x)
{ if (x/2>0)
fun(x/2);
printf("%d",x);
}
main()
{ fun (6); }

答案是136
本人初学有点看不懂 可以给解释下吗?

这个要想彻底理解,你必须对函数调用的堆栈变化有了解才行

func(6);
函数的参数都是局部变量,首先会进入堆栈,在打印6之前,因为6/2=3>0所以又开始调用一次func,同时3进入上一层的堆栈,直到if语句不成立,打印最有一个1,函数开始返回,函数返回的过程就是清除堆栈的过程,进入上一层的call frame,打印3;依次类推打印6;

最后函数返回退出