一个函数直接或间接地调用自己,称为函数的递归调用。所以函数递归调用的实现必须依靠系统提供一个特殊部件(堆栈)存放未完成的操作,以保证当递归调用结束回溯时不会丢失任何应该执行而没有执行的操作。为了理解函数递归调用的特性,参照例5.9的程序讨论函数递归调用的执行过程,为了讨论方便为程序加上行号。函数递归调用示例。......
2023-11-20
递归函数是指一个函数在它的函数体内,直接或间接地调用自己,也称为函数的递归调用。在递归调用中,调用函数又是被调用函数,执行递归函数将反复调用自己。每调用一次就进入新的一层。
为了防止递归调用无终止地进行,在函数内必须有终止递归调用的手段。常用的办法是加条件判断,当满足某种条件后就不再进行递归调用,而逐层返回。
递归是一种有效的程序设计方法。简单地说,就是自调用。递归算法就是包含有调用算法本身语句的算法。如果一个算法中含有直接或间接调用自己的过程,即为一个递归算法。而递归必须逐步有规律简化,最终有一个出口。不允许无穷递归调用。要解决递归问题,应该满足两个条件:
(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 并结束递归。
有关C语言程序设计实用教程的文章
一个函数直接或间接地调用自己,称为函数的递归调用。所以函数递归调用的实现必须依靠系统提供一个特殊部件(堆栈)存放未完成的操作,以保证当递归调用结束回溯时不会丢失任何应该执行而没有执行的操作。为了理解函数递归调用的特性,参照例5.9的程序讨论函数递归调用的执行过程,为了讨论方便为程序加上行号。函数递归调用示例。......
2023-11-20
从函数的定义来看,可以分为标准函数和自定义函数两种。不同的编译系统提供的库函数的名称和功能可能会有所区别。从函数的形式看,函数分为无参函数和有参函数两类。有参函数在调用函数时,在主调函数和被调函数之间有数据传递。从函数调用结果分类,函数又可以分为有返回值函数和无返回值函数。......
2023-10-21
图5.7两层函数嵌套调用示意图函数的嵌套调用即一个函数在被调用的过程中又调用了另外的一个函数。函数fac和powers的返回值类型均被设计为double型,其主要目的是为了避免n!x:0.5//0.5从键盘输入的数据0.50 powers of e=1.648721//程序执行结果......
2023-11-20
二进制文件的特点是存储效率较高,但不便于程序中直观地进行数据处理。非缓冲文件系统指的是不由系统开辟文件缓冲区,而是由程序员为用到的每个文件设置数据缓冲区,并自行对文件缓冲区进行管理。C语言中,用一个系统已经构造好的文件类型变量来保存这些信息。......
2023-11-20
图5.3程序运行结果说明:定义函数时指定的形参变量在未出现函数调用时,并不占用内存的存储单元。图5.4程序运行结果说明:程序中实参与形参同名,但两者的作用范围不同,程序开始执行时,为主函数中的变量n分配存储空间,实参n 在主函数main()中有效;主函数调用函数s(),有效的是形参n。程序的运行结果表明,当函数调用时,实参的值传送给形参,在被调函数内部,形参的变化不会影响实参的值。......
2023-10-21
包括函数名的命名和类型说明、形式参数的类型说明、变量定义和语句。下面举例说明主函数和自定义函数。函数的定义是平行的,彼此相互独立,不能嵌套定义。函数的类型和函数返回值的类型应保持一致。以两个数求和为例,说明函数的定义。......
2023-10-21
在C语言中,以函数首部声明函数的形式称为函数原型。使用函数原型是C语言的一个重要特征,主要作用是利用它在程序的编译阶段对调用函数的合法性进行全面检查。......
2023-11-18
在某些问题中,可以用调用函数自身的方式来解决问题。在一个函数中直接或间接地调用该函数自身的方式称做函数的递归调用。递归的概念在我们的自然生活中并不陌生。讲的故事又是其自身,这就相当于递归。这也是递归的例子。在数学中,更是有许多函数采用递归的定义形式。=3628800函数fact()包含了对其自身的调用,因此fact()是一个递归函数。来看一看这个递归函数的执行过程。图5.6递归求解3!......
2023-11-18
相关推荐