zoukankan      html  css  js  c++  java
  • C++函数二(函数的嵌套调用和递归调用)

    函数的嵌套调用

    C++不允许对函数作嵌套定义,也就是说在一个函数中不能完整地包含另一个函数。在一个程序中每一个函数的定义都是互相平行和独立的。虽然C++不能嵌套定义函数,但可以嵌套调用函数,也就是说,在调用一个函数的过程中,又调用另一个函数

    所谓嵌套调用,是在调用一个函数并执行该函数的过程中,又调用另一个函数的情况如在main()函数中调用a函数,而在a函数的执行过程中又调用b函数这就构成了两层嵌套调用,如图所示:

     

    根据函数的调用原则,被调用函数返回时(执行了return语句,或执行到函数的最后语句),一定是返回到调用它的函数(主调函数)的中断位置,继续执行主调函数后面的语句。

    【实例】

    #include<iostream>
    
    using namespace std;
    
      int func2(int x)
    
    {
    
    int t;
    
    t = x + 9;
    
    return (t);
    
    }
    
      int func1(int a, int b)
    
    {
    
    int z;
    
    z = func2(a*b);
    
    return(z);
    
    }
    
    int main() {
    
    int x1 = 2, x2 = 5, y;
    
    y = func1(x1, x2);
    
    cout << y << endl;
    
    system("pause");
    
    return 0;
    
    }

     函数的递归调用

    1.递归调用

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

    double f(double x)
    double y;
    
    y=f(x);
    return y*y;

    这里,在f函数的内部,又调用了f函数,这是直接调用本函数。如果在调用f1函数过程中要调用f2函数,而在调用f2函数过程中又要调用f1函数,这是间接调用本函数。

    递归调用都是无终止地调用自己。程序中不应该出现这种无止的递归调用,而应该为有限次数、有终止的递归调用。这可以使用if语句来控制,当满某一条件时让递归调用结束。

    实例从键盘输入一个整数,求该数的阶乘

    根据求一个数n的阶乘的定义n!=n(n-1),可写成如下形式:
    f(n)=1  (n=1)

    Fac(n)=n*fac(n-1)  (n>1)

    #include<iostream>
    using namespace std;
    long fac(int n)
    {
        long p;
        if (n == 1) p = 1;
        else p = n * fac(n - 1);
        return p;
    }
    int main (){
        int n;
        cout << "输入一个正整数";
            cin >> n;
            cout << n << "!=" << fac(n)<< endl;
            system("pause");
         return 0;
    }

    2. 递归调用的执行过程(递归的深入理解)

    递归调用的执行过程分为递推过程和回归过程两部分。这两个过程由递归终止条件控制,即逐层递推,直至到达递归终止条件,然后逐层回归。递归调用与普通的函数调,利用了先进后出的栈结构来实现。每次调用时,在栈中分配内存单元,保存返回地址以及参数和部变量而与普通的函数调用不同的是,由于递推的过程是一个逐层调用的过程,因此存在一个逐层连续的参数入栈过程,调用过程每调用一次自身,把当前参数压栈,每次调用时都首先判断递归终止条件,直至达到递归终止条件为止;接着回归过程不断从栈中弹出当前的参数,直到栈空返回到初始调用处为止

  • 相关阅读:
    Python 编程笔记(小白初学篇)
    博客园设置好看的主题!站在巨人的肩膀上眺望远方!!
    Matlab 画地图之 m_map
    SSO+PHS 同步问题修正解决
    从已删除邮箱copy数据到活动邮箱
    微软AD相关操作的免费工具
    phpize是什么
    apache的bin目录下的apxs有什么作用? PHP模块加载运行方式
    docker
    sed 命令
  • 原文地址:https://www.cnblogs.com/CX66/p/13907505.html
Copyright © 2011-2022 走看看