C语言递归函数
程序员文章站
2022-07-12 09:54:49
...
前言
- 本博文的代码基于VC++6.0开发调试;
- 递归函数是C语言的一大特点,也是C语言的一个重要知识点;
- 递归函数往往遵循着公式(例如等比数列,等差数列等);
- 最重要了解递归的这么一个思想;
什么是递归函数
从功能上来看:递归函数是一个函数,C语言中,每个函数都代表一个独立的功能;递归函数当然也是一个功能函数;
从形式上来看:一种函数被自己本身调用的函数;
注意:递归虽说是函数本身调用自己,但是本身这个函数不应该是无穷无尽的在执行,所以这里要借助条件语句进行根据实际情况结束函数;
递归过程:回溯和递推 (利用等差数列的求第n项数值来说明)
回溯:从未知值的项,通过某种数学函数关系,追溯到已知项的值;
递推:得到初始值后,通过函数关系求出未知项值;
例如求等数列的第n项数值,回溯是:我们并不知道第n项,n-1项,n-2项 …… 2项的数值,但是知道第1项的数值,这样,就得到了数学公式的初始值;递推是:得到了已知项的值,通过数学公式计算出所要求的项的值;
等差数列说明递归函数
问题:一共五个同学,已知第一位同学的年龄是10岁,第二位同学的年龄比第一位大2岁,第三位同学的年龄比第二位大2岁……第五位同学的年龄比第四位同学大2岁;利用键盘输出同学的编号,查询这位同学的年龄;
所以这里有一个等差数列关系,函数关系式如下:
age_1 = 10; (n=1)
age_n = age_n-1+2; (n>1)
代码:
#include <stdio.h>
void main()
{
int age(int n);
int n;
printf("请输入学生编号:");
scanf("%d",&n);
printf("这位学生的年龄是:%d\n",age(n));
}
int age(int n)
{
int age_value;
if(n == 1)
age_value = 10;
else
age_value = age(n-1)+2;
/*上面这至关重要,是递归的核心,在整个程序执行过程中,大致的运算过程可以理解为:
age(5)==age(age(age(age_value+2)+2)+2)+2;(这个式子就是递归的思想)
*/
return age_value;
}
程序执行过程:
总结:
(1) 回溯过程中,公式中的age(n)的值是未知的;递推过程中的age(n)的值则是已知的;
(2) 回溯过程中相邻的两个方框是嵌套关系,后者嵌套在前者函数内;递归过程中,相邻两个方框也是嵌套关系,内嵌函数返回值给外函数;
运行结果:
上一篇: 存储过程实验