C语言函数的递归镶嵌套用(下)

 2023-03-10 12:07:09  阅读 0

一、函数的递归调用

C语言课程中,调用函数和被调用的函数可以是不用的,那么当然相同的也是可以的,C语言中允许一个函数调用它自身。例如我们求水仙花数,或者从1遍历到100,函数不停的循环被调用,那么哦我们就可以将这个函数称为递归函数。函数的递 归调用是函数嵌套调用的一种特殊形式。其定义形式如下:

int f(int x)
{
    int y,z;
    z=f(y);
     return(2*z);
  }

我们看一道递归运用的经典例题:

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

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-1)+2         (n>1)

可以用一个函数来描述上述递归过程:
int age(int n)        /*求年龄的递归函数*/
 {  int c; /* c用作存放函数的返回值的变量 */
    if(n==1) c=10;
       else  c=age(n-1)+2;
   return(c);
}
用一个主函数调用age函数,求得第5人的年龄。
#include <stdio.h>
void main()
{
        printf(″ %d ″,age(5));
} 

运行结果如下: 18

当然,递归其实是需要模板的,我们只需要掌握一些常用的递归模板即可:

可以用下面的递归公式计算n!:

//FileName: chap5_8.c
#include<stdio.h>
long  factorial(int n);
int main()
{
    long result;
    int n;
    printf("Please input the value of n: ");
    scanf("%d", &n);
    result=factorial(n);
    printf("%d! = %ld\n", n, result);
    return 0;
}
long  factorial(int n)    //递归函数定义
{
  long s;
  if(n == 0)      //递归出口
   s=1;
  else
   s= factorial(n - 1) * n;      //递归调用
  return  s;
}

程序运行结果如下: Please input the value of n:3↙ 3!=6

标签:

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码