• 函数的递归调用


    /* 函数的递归调用:在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用

    p185 例7.6 有5个学生坐在一起,问第5个学生多少岁,他说比第4个学生大2岁。问第4个学生岁数,他说
    比第3个学生大2岁。问第3个学生,又说比第2个学生大2岁。问第2个学生,说比第1个学生大2岁。最后问
    第1个学生,他说是10岁。请问第5个学生多大。

    解题思路:要求第5个学生的年龄,须先求出第4个学生的年龄,第4个取决于第3个学生,第3个取决
    于第2个,第2个取决于第1个。每一个学生的年龄都比起前一个学生大2。即:
        age(5)=age(4)+2
        age(4)=age(3)+2
        age(3)=age(2)+2
        age(2)=age(1)+2
        age(1)=10
    可用数学公式表述如下:
        age(n)=10 (n=1)
        age(n)=age(n-1)+2 (n>1)

    */

    #include<stdio.h>
    int main()
    {
      int age(int n);
      printf("NO.5,age=%d ",age(5)); //输出第5个学生的年龄
      return 0;
    }

    int age(int n) //定义递归函数
    {
      int c;
      if(n==1) //如果n等于1
      {
        c=10; //年龄为10
      }
      else //如果n不等于1
        c=age(n-1)+2; //年龄是前一个学生的年龄加2
      return(c); //返回年龄
    }

    运行结果:

    程序分析:main函数中实际上只有一个语句。整个问题的求解全靠一个age(5)函数调用来解决。调用过程如下图所示

     从上图可以看到:age函数共被调用5次,即age(5)、age(4)、age(3)、age(2)、age(1)。其中age(5)是main函数调用的,

    其余4次是在age函数中调用的,即 递归调用4次。

    /* p187 例7.7 用递归方法求n!
    解题思路:求n!可以用递归方法,即从1开始,乘2,再乘3……一直乘到n。
    n!=n*(n-1)!

    求n!也可以用递归方法,即5!=4!*5,4!=3!*4,…,1!=1。可用下面的递归公式表示:
    n!=1 (n=0,1)
    n*(n-1)! (n>1)
    */

    #include<stdio.h>
    int main()
    {
      int fac(int n); //fac函数声明
      int n;
      int y;
      printf("input an integer number:");
      scanf("%d",&n); //输入要求的阶乘数
      y=fac(n);
      printf("%d!=%d ",n,y);
      return 0;
    }

    int fac(int n) //定义fac函数
    {
      int f;
      if(n<0) //n不能小于0
        printf("n<0,data error!");
      else if(n==0||n==1) //n=0 或,1时 n!=1
         f=1;
      else f=fac(n-1)*n; //n>1时,n!=n*(n-1)
      return(f);

    }

    运行结果:

     程序分析:递归终止条件为n=0或n=1。

     

  • 相关阅读:
    Java回调理解 (step by step)
    Android中网络流量控制(防火墙)——Iptables
    JavaScript学习总结1
    怎样在Android实现桌面清理内存简单Widget小控件
    linux文件夹介绍
    git版本号回滚
    页面载入完毕后表单获得焦点
    (转)Arcgis for JS之Cluster聚类分析的实现
    (转)Arcgis for javascript实现百度地图ABCD marker的效果
    (转)Hadoop入门进阶课程
  • 原文地址:https://www.cnblogs.com/ddhdd/p/8639200.html
Copyright © 2020-2023  润新知