鱼C论坛

 找回密码
 立即注册
查看: 2128|回复: 3

C语言递归是怎么运算的?

[复制链接]
发表于 2019-6-29 13:01:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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出来,小弟才接触这个递归不懂它是怎么运算的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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
程序结束

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 3 反对 0

使用道具 举报

发表于 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)这三个都满足啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-19 12:06:27 | 显示全部楼层
本帖最后由 AmosAlbert 于 2019-7-19 12:07 编辑

压入堆栈,递归运算,有没有感觉很押韵
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-17 00:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表