• 函数的嵌套调用与递归(初学者)


    1、函数的嵌套调用

    嵌套定义是在定义一个函数时,其函数体内又包含另一个函数的完整定义。

    然而,C语言不能嵌套定义函数,但可以嵌套调用函数,也就是说,在调用一个函数的过程中,又调用另一个函数。

    例:

    main()

    {

      a();

    }

    a()

    {

      b();

    }

    b()

    {

      return;

    }

    例题:计算s=2²!+3²!

    思路:(1)可编写两个函数,一个是用来计算平方值的函数square,另一个是用来计算阶乘值的函数factorial。

    (2)主函数先调square计算出平方值,再在square中以平方值为实参,调用factorial函数计算其阶乘值,再返回主函数,在循环程序中计算累加和。

    #include <stdafx.h>
    #include<stdio.h>
    
    long square(int p);
    long factorial(int q);
    void main()
    {
        int i;
        long s=0;
        for(i=2;i<=3;i++)
        {
            s=s+square(i);
        }
        printf("%ld
    ",s);
    }
    long square(int p)
    {
        int k;
        long r;
        k=p*p;
        r=factorial(k);
        return (r);
    }
    
    long factorial(int q)
    {
        long c=1;
        int i;
        for(i=1;i<=q;i++)
        {
            c*=i;
        }
        return c;
    }

    2、递归

    在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用。C语言的特点之一就在于允许函数的递归调用。

    例:int flint (x)

      {

        int y,z;

        z=flint(y);

        return (2*z);

      }

    注:递归函数必须要有一个退出条件!

    例:用递归的方法求n!

    思路:求n!也可用递归的方法,即5!=4!*5,4!=3!*4……可用如下递归公式表示:

    n=1  (n=0,1)

    n*(n-1)!  (n>1)

    #include <stdafx.h>
    #include<stdio.h>
    
    long recusion(int n);
    void main()
    {
        int n;
        long result;
        printf("input a integer number:
    ");
        scanf("%d",&n);
        result=recusion(n);
        printf("%d!=%ld
    ",n,result);
    }
    
    long recusion(int n)
    {
        long tomp_result;
        if(n<0)
        {
            printf("n<0,input error!
    ");
        }
        else if(n==0||n==1)
        {
            tomp_result=1;
        }
        else
        {
            tomp_result=n*recusion(n-1);
        }
        return tomp_result;
    }

    注:递归算法是效率低下的算法,但有些问题却只能用递归算法才能实现。如:Hanoi塔问题。

  • 相关阅读:
    浮点型float
    Linux时间同步命令
    四层负载均衡和七层负载均衡的区别
    Linux下把Mysql和Apache加入到系统服务里
    Linux下Nagios的安装与配置
    Linux是怎么启动的(整理)
    centos 双网卡 eth0 eth1 配置
    MYSQL的常用命令和增删改查语句和数据类型
    CentOS 下如何修改 MySQL 的密码
    mysql unrecognized service问题解决
  • 原文地址:https://www.cnblogs.com/lvfengkun/p/10344370.html
Copyright © 2020-2023  润新知