函数的递归以及作用域


前言

我们知道不同的函数之间可以互相调用,比如a函数调用b函数,b函数调用c函数,那能不能a函数调用他本身呢?

我们刚开始学习变量,变量有没有作用范围呢?


一.函数的递归调用

1.递归指的是在函数的定义中使用函数自身的方法。

递归的思想:

(1)找到规律

(2)递归调用的条件

(3)结束递归的条件

递归的程序图如下:

2.递归的案例分析

int fac(int n);
int main (void)

{   
    printf ("%d\n",fac(5));
    return 0;
}
int fac(int n)
{
    if(n<1)
      return -1;
    else if (n==1)
      return 1;
    else 
      return n*fac(n-1);
}

二.作用域

1.作用域:一个代码空间。

2.文件作用域:从文件头到文件尾的代码空间。

3.函数作用域:函数的参数和函数体属于函数作用域,函数的返回值和函数名属于文件作用域。

4.语句块作用域

int c=10;//c的作用域是文件作用域
int fun(int b);
int main (void )
{
    int a=10;//函数的作用域
    a=20;
        {
            int j=0;//语句块作用域
            j=50;
        }
    a=fun(5);
    return 0;
    
}
int fun(int b)//b也是函数的作用域
{
  int i=0;
  b=30;
  return b;
}

三.存储类别

1.存储类别解决的是标识符的”生命周期“或者变量内存的开辟时间和销毁时间。

2.存储类别与作用域没有关系。

void foo(int a)
{
int b=0;
}//a的内存销毁
int main(void)
{
    foo(10);//a内存开辟
    return 0;
}


总结

作用域是程序中定义的变量所存在的区域,超过该区域变量就不能被访问,这就是本章的重点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值