C语言递归是怎么运算的?
#include <stdio.h>void age(int x);
int main()
{
age(3);
return 0;
}
void age(int x)
{
if (x>0)
{
age(x - 1);
printf("%d\n", x);
}
}
if条件满足的时候程序应该不会走到printf哪里
if条件不满足了应该里面的代码都不会执行,为什么还会打印1 2 3出来,小弟才接触这个递归不懂它是怎么运算的。 执行顺序是这样的。
先调用age(3),
因为3>0所以再调用了age(2)
因为2>0所以再调用了age(1)
因为1>0所以再调用了age(0)
因为0>0不成立,所以age(0)这个函数结束了
然后执行age(0)后面的print语句,也就是打印出 x=1
然后此时age(1)这个函数也结束了,打印出 x = 2
打印完2后,age(2)这个函数也结束了,打印出 x = 3
程序结束
楼上说的很清楚
你是不是把它理解为一个函数
其实它调用了4个函数 age(3) age(2) age(1) age(0)
不过通过一个函数表示
void age(int x)
{
//假如现在x==3它会执行下面两条语句
if (x>0)
{
//程序进入age(2)
age(x - 1);
//age(2)的函数不会影响到下面那条语句 除非你的X是全局变量
printf("%d\n", x);
}
}
说白了就是
age(3) = age(2)+printf("3\n");
age(2) = age(1)+printf("2\n");
age(1) = age(0)+printf("1\n");
age(0) = /*没有*/;
所以
age(3) =/*没有*/ +printf("1\n")+printf("2\n")+printf("3\n");
if条件不满足的时候程序是不会走到printf那里
但是age(3) age(2) age(1)这三个都满足啊 本帖最后由 AmosAlbert 于 2019-7-19 12:07 编辑
压入堆栈,递归运算,有没有感觉很押韵
页:
[1]