kingsxiu3 发表于 2019-6-29 13:01:05

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出来,小弟才接触这个递归不懂它是怎么运算的。

newu 发表于 2019-6-29 13:14:18

执行顺序是这样的。
先调用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
程序结束

micolar 发表于 2019-6-30 10:01:28

楼上说的很清楚
你是不是把它理解为一个函数
其实它调用了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:06:27

本帖最后由 AmosAlbert 于 2019-7-19 12:07 编辑

压入堆栈,递归运算,有没有感觉很押韵
页: [1]
查看完整版本: C语言递归是怎么运算的?