首页 理论教育C语言递归函数及执行过程简介

C语言递归函数及执行过程简介

【摘要】:递归函数是指一个函数在它的函数体内,直接或间接地调用自己,也称为函数的递归调用。为了防止递归调用无终止地进行,在函数内必须有终止递归调用的手段。递归算法就是包含有调用算法本身语句的算法。而递归必须逐步有规律简化,最终有一个出口。应有使递归结束的条件。有5 个学生坐在一起。图5.13递归函数的执行过程用函数递归方法以字符串形式输出一个整数。

递归函数是指一个函数在它的函数体内,直接或间接地调用自己,也称为函数的递归调用。在递归调用中,调用函数又是被调用函数,执行递归函数将反复调用自己。每调用一次就进入新的一层。

为了防止递归调用无终止地进行,在函数内必须有终止递归调用的手段。常用的办法是加条件判断,当满足某种条件后就不再进行递归调用,而逐层返回。

递归是一种有效的程序设计方法。简单地说,就是自调用。递归算法就是包含有调用算法本身语句的算法。如果一个算法中含有直接或间接调用自己的过程,即为一个递归算法。而递归必须逐步有规律简化,最终有一个出口。不允许无穷递归调用。要解决递归问题,应该满足两个条件:

(1)函数直接或间接地调用它本身。

(2)应有使递归结束的条件。

【例5.13】有5 个学生坐在一起。

问第5 个学生多少岁?他说比第4 个学生大2 岁。

问第4 个学生岁数,他说比第3 个学生大2 岁。

问第3 个学生,又说比第2 个学生大2 岁。

问第2 个学生,说比第1 个学生大2 岁。

最后问第1 个学生,他说是10 岁。

请问第5 个学生多大?

分析:

(www.chuimin.cn)

可以用数学公式表述为:

程序如下:

执行过程如图5.13 所示。

图5.13 递归函数的执行过程

【例5.14】用函数递归方法以字符串形式输出一个整数。

算法分析:将一个整数按字符串的形式输出,必须从这个整数的高位开始,如果这个整数为负数,则需要先输出一个负号。然后判断这个整数,如果它除以10 的商的整数部分非零,则将商的整数部分再除以10,直到商的整数部分为零,则开始从商的余数所对应的字符开始输出,直到将整个数输出。这一过程用printf 函数的递归调用完成。程序如下:

一般情况下,当递归调用发生时,每次函数调用时的参数都与上次不同,且与上次调用的参数有关。在本题中,若输入的数为123,在调用时printd(123),它将12 作为实参,第二次调用printd();接着再将1 作为实参,第三次调用printd();第三次调用printd()将打印出1,接着返回到第二次调用printd(),这时将打印出2,接着又返回到第一次调用printd(),这时,将打印出3 并结束递归。