有关函数的基础知识

  1. 函数的嵌套使用

函数可以在函数内部被调用,但是不能在函数内部定义,每个函数都需要单独定义。

 int test1()
 {
     
     int test2()
     {
         
     }
 }//这么写是错误代码 
 //正确写法,函数内部可以互相调用 
 void test2()
 {
     printf("hehe\n");
 }
 void test1()
 {
     void test2();
 } 
 int main()
 {
     test1();
     return 0;
 } 
  1. 函数的链式访问

一个函数的返回值,被当成另外一个函数的参数

int main()
{
    //printf返回值是屏幕上打印字符的个数 ,打印的结果为4321 ,典型的链式访问 
    printf("%d", printf("%d", printf("%d", 43)));
}

  1. 程序的声明

在计算机中,程序的读取是自上而下的。因此要将函数定义放在函数调用之前,计算机才能识别出来。如果将函数定义放在函数调用之后,要先声明函数

int main()
{
    int a = 1;
    int b = 2;
    //程序的声明:计算机读代码是从前往后读,当函数的定义在函数调用下面,需要先声明一下函数 
    int add(int x, int y);
    
    int c = add(a ,b);
    
    printf("%d\n", c);
    return 0;
}
int add(int x, int y)
{
    return x + y;
}

函数声明的常用场景:

当几个人共同完成一个项目时,每个人都创建自己的函数。当别人代码想引用你的函数时,要将函数的声明部分放在头文件中“xxx.h”,再将函数的定义部分放在“xxx.c”中。调用函数的时候需要用,#include <"xxx.h"> ,进行调用

  1. 函数递归

简单来讲就是函数自己调用自己。通常把复杂的问题转化为一个与原问题相似的规模较小的问题来求解,用少量的代码进行多次计算

  • 函数递归的两个必要条件

  • 存在限制条件,当满足这个条件时,递归不在继续。不然很容易陷入死循环,其次可能导致栈溢出

  • 每次递归调用后,要越来越接近这个限制条件

  • 栈溢出

  • 每次调用函数的时候,都会在栈区创建一块空间,函数递归的次数太多,会导致空间越建越多,系统内存不够用。(递归函数只有在完成时,创建的空间才会销毁)

  • 递归的注意事项:

  • 不能写死递归,要有跳出条件,每次递归都逼近跳出条件

  • 递归层次不能太深

  • 递归与迭代

  • 有些时候递归与迭代(循环语句)都能解决实际问题,但是在使用的时候需要考虑计算量。如:计算斐波那契数列的时候,使用递归会导致计算机计算量太大,产生过多的负荷影响计算速度,而使用迭代则不会出现这个问题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Ljiyu0506

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

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

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

打赏作者

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

抵扣说明:

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

余额充值