递归函数
直接或间接调用自己的函数称为递归函数。
递归函数的要求: 递归函数必须定义一个终止条件, 否则,函数将永远递归下去。
#include<iostream>
using namespace std;
long fact(int i);
int main()
{
int num;
cout << "请输入一个小于8的正整数: " << endl;
cin >> num;
long res = fact(num);
cout << num << "的阶乘为:" << res << endl;
return 0;
}
long fact(int i)
{
long temp;
if (i == 0)
{
temp = 1;
}
else
{
temp = i * fact(i - 1);
}
return temp;
}
内联函数
内联函数是C++为提高程序运行速度所做的一项改进。
内联函数的编译代码与其他程序代码“ 内联” 起来了, 也就是说, 编译器将使用相应的函数代码替代函数调用。
对于内联代码, 程序无需跳到另一个位置处执行代码, 再跳回来。 因此, 内联函数的运行速度比常规函数稍快, 但代价是需要占用更多内存。
内联函数的使用方法: 在函数声明或函数定义前加上关键字inline。
通常的做法是省略原型, 将这个定义放在本应提供原型的地方。
注意: 内联函数不能递归。
#include<iostream>
using namespace std;
inline int sum(int a, int b){return a + b;}
int main()
{
int res = sum(60, 25);
cout << res << endl;
return 0;
}
constexpr函数
constexpr函数: 是指能用于常量表达式的函数, 即可以在编译时计算其返回值的函数。
常量表达式是指值不会改变并且在编译过程就能得到计算结果的表达式。
注意:
- 函数中只能有一个return语句。
- 返回值必须是字面值类型(算术类型、 引用、 指针属于字面值类型)。
- 参数必须是字面值类型(自定义类、 IO库、 string类型不属于字面值类型)。
- constexpr函数被隐式地指定为内联函数。
- 允许递归。
#include<iostream>
using namespace std;
//常量表达式函数
constexpr int fact(int n)
{
return n == 1 ? 1 : n * fact(n - 1);
}
//常量表达式
constexpr int num = 5;
int main()
{
//在编译期间可以计算并返回结果
cout << fact(num) << endl;
cout << fact(3) << endl;
//实参为变量时,在程序运行期间计算并返回结果
int i = 8;
int res = fact(i);
cout << res << endl;
return 0;
}