「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战」
函数基础
- 1、返回类型
- 2、函数名称
- 3、参数:参数列表包含函数参数的类型 顺序、数量。参数是可选的
函数重载
头文件中声明 stdafx.h
int test(int a);
int test(double a);
namespace otherTest {
int test(int a);
}
源文件中实现 stdafx.cpp
int test(int a) {
return a;
}
int test(double a) {
return (int)a;
}
namespace otherTest {
int test(int a) {
return a + 1;
}
}
引用
#include "stdafx.h"
int main()
{
int a = 3;
double c = 14.0;
cout << test(a) << endl;
cout << test(c) << endl;
cout << otherTest::test(a) << endl;
}
命名空间
关键词: using和namespace的使用
函数指针与返回指针的函数
函数指针
定义:每一个函数都占用一段内存单元,他们由一个起始地址,指向函数入口地址的指针。
一般形式: 数据类型(*指针变量名)(参数表)
eg:int(*p)(int);
注意:
函数指针
int(*p)(int);//是指针,指向一个函数入口地址
返回指针的函数
int* p(int);//是函数,返回的值是一个指针
#include <string>
#include <iostream>
using namespace std;
int max(int a, int b) {
return a > b ? a : b;
}
int min(int a, int b) {
return a < b ? a : b;
}
int add(int a, int b) {
return a + b;
}
/* int(*p)(int a, int b) 函数指针(回调函数)*/
int processNum(int x, int y, int(*p)(int a, int b)) {
return p(x, y);
}
int main()
{
int a = 3;
int b = 4;
cout << processNum(a, b, max)<< endl;
cout << processNum(a, b, min) << endl;
cout << processNum(a, b, add) << endl;
return 0;
}
打印 4 3 7
函数主体
函数主体:函数主体包含一组定义函数执行任务的语句
内联函数
内联函数:为了解决程序中函数调用的效率问题;
注意:内敛函数内部不能有太复杂的逻辑。编译器又是会有自己的优化策略,所以内敛不一定起作用。
递归
斐波那契数列
四个基本准则
- 基准情形:无须递归就能解出
- 不断推进:每一次递归调用都必须使求解状况朝接近基准情形的方向推进;
- 设计法则:假设所有的递归调用都能运行
- 合成效益法则:求解一个问题的同一个实例时,切勿在不同的递归调用中做重复性的工作
递归最大的缺陷
- 在栈上开辟大量的空间
- 时间上可能需要大量的重复运算
递归的优化
- 尾递归: 所有递归形式的调用都出现在函数的末尾
- 使用循环代替
- 使用动态规划 空间换时间