C语言递归函数

C语言递归函数前言本博文的代码基于VC++6.0开发调试;递归函数是C语言的一大特点,也是C语言的一个重要知识点;递归函数往往遵循着公式(例如等比数列,等差数列等);最重要了解递归的这么一个思想;什么是递归函数从功能上来看:递归函数是一个函数,C语言中,每个函数都代表一个独立的功能;递归函数当然也是一个功能函数;从形式上来看:一种函数被自己本身调用的函数;注意:递归虽说是函数本…

前言

  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;
}

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

今天的文章C语言递归函数分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/30256.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注