C语言基础 -44 函数_递归

递归:一个函数直接或间接调用自己,是嵌套的特例

book@100ask:~/C_coding/CH02$ cat func.c
#include <stdio.h>
#include <stdlib.h>

void a(void)
{
	printf("[%s]Begin!\n",__FUNCTION__);
	printf("[%s] call b()!\n",__FUNCTION__);
	b();
	printf("[%s]b() return!\n",__FUNCTION__);
	printf("[%s]End!\n",__FUNCTION__);
}

void b(void)
{
        printf("[%s]Begin!\n",__FUNCTION__);
        printf("[%s] call c()!\n",__FUNCTION__);
        c();
        printf("[%s]c() return!\n",__FUNCTION__);
        printf("[%s]End!\n",__FUNCTION__);
}

void c(void)
{
        printf("[%s]Begin!\n",__FUNCTION__);
        printf("[%s]End!\n",__FUNCTION__);
}

int main()
{
        printf("[%s]Begin!\n",__FUNCTION__);
        printf("[%s] call a()!\n",__FUNCTION__);
        a();
        printf("[%s]a() return!\n",__FUNCTION__);
        printf("[%s]End!\n",__FUNCTION__);
        return 0;
}


book@100ask:~/C_coding/CH02$ make func
cc     func.c   -o func

book@100ask:~/C_coding/CH02$ ./func
[main]Begin!
[main] call a()!
[a]Begin!
[a] call b()!
[b]Begin!
[b] call c()!
[c]Begin!
[c]End!
[b]c() return!
[b]End!
[a]b() return!
[a]End!
[main]a() return!
[main]End!

压栈,栈恢复

使用递归时,很可能提前无法判断递归多少次,递归多少层,可能段破裂,实际使用上面要多加小心

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章