欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言递归函数

程序员文章站 2022-07-12 09:54:49
...

前言

  1. 本博文的代码基于VC++6.0开发调试;
  2. 递归函数是C语言的一大特点,也是C语言的一个重要知识点;
  3. 递归函数往往遵循着公式(例如等比数列,等差数列等);
  4. 最重要了解递归的这么一个思想;

什么是递归函数

从功能上来看:递归函数是一个函数,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;
}

程序执行过程:
C语言递归函数
总结:
(1) 回溯过程中,公式中的age(n)的值是未知的;递推过程中的age(n)的值则是已知的;
(2) 回溯过程中相邻的两个方框是嵌套关系,后者嵌套在前者函数内;递归过程中,相邻两个方框也是嵌套关系,内嵌函数返回值给外函数;
运行结果:
C语言递归函数

相关标签: C语言 递归