【C语言】【学习笔记】函数嵌套调用、链式访问和递归

本文介绍了函数的嵌套调用和链式访问概念,强调了函数声明和定义的规则。讨论了静态库在多模块开发中的作用,以及如何生成和使用静态库。接着,详细讲解了递归的概念和示例,同时也提到了递归可能导致的栈溢出问题。最后,对比了递归与迭代在效率和可读性上的差异。
摘要由CSDN通过智能技术生成

一、函数嵌套调用与链式访问

(一)概念与区分

函数和函数之间可以根据实际的需求进行组合的,也就是互相调用的。 嵌套调用:

在函数定义中调用其他函数,但函数只能嵌套调用不能嵌套定义。

int max(int x)     
{
add();//这样是可以的,但在这里自定义函数就不行了
return 0;
}

链式访问:

将其他函数的返回值作为参数来调用的叫链式访问。

printf("%d",printf("%d ",printf("%d",43)))

(注:printf的返回值为其打印在屏幕上的数目,如,printf("%d",43)的返回值为2)

二、函数和变量的声明

(一)总原则:先声明后定义,外部要加extern。

(二)变量的声明和定义(内部)

定义:可以在任意位置(除函数内)

声明:①要包含数据类型和变量名

②如:int x;

③定义要在声明之前

(三)函数的声明和定义

定义:自定义函数

声明:①要包含返回值类型、变量名和参数类型

②如:int max(int,int)

(四)声明注

1. 告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,函数 声明决定不了。 2. 函数的声明一般出现在函数的使用之前。要满足先声明后使用。 3. 函数的声明一般要放在头文件中的。

三、静态库

(一)多模块文件

在大型工程,一个人无法处理庞大的工作量,而将工程划分为一个个模块就能很好解决这个问题,只要每个程序员分别处理其中一个或多个模块,最后将所有模块整合起来就可以了。

而承载这一模块的载体便可以是静态库;

(二)静态库内容

需要.c文件和.h文件

.c文件存放函数

.h文件存放声明

(三)静态库生成

在文件栏找到工程→鼠标右击找到属性→”常规“→”配置类型“→“应用程序”改”静态库“→编译

(四)使用

将生成的.lib文件添加到工程文件,使用#pragma comment(lib,"静态库名")加载静态库

四、函数递归

(一)概念

程序调用自身的编程技巧称为递归( recursion)。 递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接 调用自身的 一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解, 递归策略 只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。 递归的主要思考方式在于:把大事化小

例:

#include <stdio.h>

int jie(int x)
{
    if (x > 1)
        return x * jie(x - 1);
    else
        return 1;
}

int main()
{
    int n = 0;
    scanf("%d", &n);
    int g = jie(n);
    printf("%d\n", g);
    return 0;
}

(二)问题;栈溢出

nt factorial(int n)
{
 if(n <= 1)
 return 1;
 else
 return n * factorial(n-1);
}

在调试 factorial 函数的时候,如果你的参数比较大,那就会报错: stack overflow(栈溢出) 这样的信息。 系统分配给程序的栈空间是有限的,但是如果出现了死循环,或者(死递归),这样有可能导致一 直开辟栈空间,最终产生栈空间耗尽的情况,这样的现象我们称为栈溢出。

五、递归与迭代

(一)递归与迭代的选择

1. 许多问题是以递归的形式进行解释的,这只是因为它比非递归的形式更为清晰。 2. 但是这些问题的迭代实现往往比递归实现效率更高,虽然代码的可读性稍微差些。 3. 当一个问题相当复杂,难以用迭代实现时,此时递归实现的简洁性便可以补偿它所带来的运行时开 销。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值