C++语言基础|函数的嵌套与递归

C++语言基础|函数的嵌套与递归

1. 函数的嵌套调用

在一个函数中调用其它函数叫函数的嵌套。C++中函数的定义是平行的,除了main()以外,都可以互相调用。函数不可以嵌套定义,但可以嵌套调用。比如函数1调用了函数2,函数2再调用函数3,这便形成了函数的嵌套调用。 1

/**************************************************************
           *
* 函数的嵌套调用, 求三个数中最大数和最小数的差值   *
**************************************************************/
#include<iostream>
using namespace std;
int max(int x,int y,int z) //函数定义
{    
    int t;
    t=x>y?x:y;
    return(t>z?t:z);
}
int min(int x,int y,int z)
{
    int t;
    t=x<y?x:y;
    return(t<z?t:z);
} 
int dif(int x,int y,int z)
{  
   return max(x,y,z)-min(x,y,z); //嵌套调用
}
int main()
{  
    int a,b,c;
    cin>>a>>b>>c;
    cout<<"Max-Min="<<dif(a,b,c)<<endl;
    return 0;
} 

注意:

  • C++中函数的定义是平行的,除了main()以外,都可以互相调用。
  • 函数不可以嵌套定义,但可以嵌套调用。

2. 函数的递归调用

在调用一个函数的过程中又直接或间接地调用该函数本身的现象,叫做函数的递归调用
n ! = { 1 n=0 n ∗ ( n − 1 ) ! n>0 n!= \begin{cases} 1& \text{n=0}\\ n*(n-1)!& \text{n>0} \end{cases} n!={1n(n1)!n=0n>0

递归可以分为直接递归调用和间接递归调用。

  • 直接递归调用:是在调用函数的过程中又调用该函数本身;
  • 间接递归调用:是在调用 f 1 ( ) f_1() f1()函数的过程中调用 f 2 ( ) f_2() f2()函数,而 f 2 ( ) f_2() f2()中又需要调用 f 1 ( ) f_1() f1()

递归方法是从结果出发,归纳出后一结果与前一结果直到初值为止存在的关系,要求通过分析得到:初值+递归函数,然后设计一个函数(递归函数),这个函数不断使用下一级值调用自身,直到结果已知处。
递归函数设计的一般形式是:

函数类型 递归函数名f (参数x )
 {
    if(满足结束条件)
        结果=初值;
    else
        结果=f(x-1)的表达式;
    返回结果;
 }

/************************************************
* 函数的递归调用, 求n!                              *
************************************************/
#include<iostream>
using namespace std;
int fac(int n)
{
    int t;
    if(n==1) 
         t=1;
    else 
         t=n*fac(n-1);//递归函数定义
    return (t);
}
int main()
{   
	 const int max_n=12;  // int 类型数能表示的n!的最大的n
     int n;
     cout<<"Input a integer number:";
     cin>>n;
     if (n>=1&&n<=max_n)
          cout<<"Factorial of "<<n<<" is: "<<fac(n)<<endl;//递归函数调用
     else
          cout<<"Invalid n."<<endl;
      return 0;
} 

递归程序分两个阶段执行:

  1. 调用: 欲求 f a c ( n ) fac(n) fac(n)→先求 f a c ( n − 1 ) → f a c ( n − 2 ) → … → f a c ( 1 ) fac(n-1)→fac(n-2) → … → fac(1) fac(n1)fac(n2)fac(1),若 f a c ( 1 ) fac(1) fac(1)已知,回推结束。
  2. 回代: 知道 f a c ( 1 ) fac(1) fac(1)→可求出$fac(2)→fac(3)→ … → (n) $

函数参数传递过程 :
在这里插入图片描述


  1. 本教程仅供教学使用,参考教材 :《C++语言程序设计教程》,杨进才、沈显君编著,清华大学出版社,2022年1月第4版 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皖山文武

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值