函数嵌套和递归调用

C语言函数调用形式有两种:嵌套调用、递归调用。
C语言函数嵌套调用:
在调用一个函数的过程中,又调用另一个函数,称为函数嵌
套调用,C语言允许函数多层嵌套调用,只要在函数调用前
有函数声明即可。

#include <stdio.h>
int fa(int a,int b); //fa函数原型
int fb(int x); //fb函数原型
int main(){
    int a=5,b=10,c;
    c=fa(a,b);
    printf("%d\n",c);
    c=fb(a+b);
    printf("%d\n",c);
    return 0;
} 

int fa(int a,int b){
    int z;
    z=fb(a*b);
    return z;
}

int fb(int x){
    int a=15,b=20,c;
    c=a+b+x;
    return c;
}

函数嵌套和递归调用

  函数嵌套和递归调用

C语言函数递归调用:

函数直接或间接调用自己称为递归调用。C语言允许函数递
归调用,如图(a) 所示为直接递归调用,如图(b)所示为间接递归调用。

函数嵌套和递归调用

注意事项: 

1.在函数递归调用时,递归函数每次调用其本身,
一个新的函数栈就会被使用,这个新函数栈里的形参、
变量和该函数的另-个函数栈里面的形参、变量是完全不同
的内存单元。

2.递归函数必须定义一个终止条件,否则函数会永远递归下去,
直到栈空间耗尽。所以,递归函数内一般都用类似f语句来判定终止条件,
如果条件成立则继续递归调用,否则函数结束递归开始返回。

函数嵌套和递归调用

递归基本思想:

找出递归子结构性质(原问题的解包含了子问题的解)、用
子问题的解来递归定义原问题的解、找出递归终止条件。
递归算法设计的关键在于:找出递归关系式和递归终止条件。
递归关系就是使问题向边界条件转化的过程,所以递归关系
必须能使问题越来越简单,规模越来越小。
因此递归算法设计,通常有以下三个步骤:
1.分析问题,得出递归关系式。
2.设置边界条件,控制递归。
3.设计函数,确定参数。

函数嵌套和递归调用

 函数嵌套和递归调用

#include<stdio.h>
int Hanio(int n,char A,char B,char C){
    //只有一个盘子直接A->C
    if(n==1) printf("%c->%c",A,C);
    else{
        //上面n-1块盘子A->B
        Hanio(n-1,A,C,B);
        //第n块盘子直接A->C
        printf("%c->%c",A,C);
        //B塔n-1块盘子B->C
        Hanio(n-1,B,C,A);
    }
}

int main(){
    int n;
    printf("input n:");
    scanf("%d",&n);
    Hanio(n,‘A‘,‘B‘,‘C‘);
    return 0;
}

相关推荐