2024年10月17日 14:37

This commit is contained in:
许大仙 2024-10-17 06:37:55 +00:00
parent 7c8a280245
commit dc321cd024

View File

@ -1130,6 +1130,66 @@ int main() {
* ② 在要求高性能的情况下尽量避免使用递归,递归调用既花时间又耗内存。
* ③ 可以考虑使用循环迭代来代替递归调用(与递归函数相比,迭代不但没有额外的内存开销,也没有额外的时间开销)。
* 示例:
```c
#include <stdio.h>
/**
* 使用循环来计算斐波那契数列
* @param n
* @return
*/
int fib(int n) {
// 出口条件
if (n == 1 || n == 2) {
return 1;
}
// 初识条件 a ,对应的是 fib(1)
int a = 1;
// 初识条件 b ,对应的是 fib(2)
int b = 1;
for (int i = 3; i <= n; ++i) { // 从 3 开始,因为 1 和 2 已经被计算过了
// 计算当前斐波那契数fib(n) = fib(n-1) + fib(n-2)
// a 表示前两个斐波那契数较小的fib(n-2)
// b 表示前两个斐波那契数较大的fib(n-1)
int temp = a + b;
// 更新 a 和 b 的值,为计算下一个斐波那契数做准备
// 现在的 b即 i - 1 项,变为了新的 a ,即新的 i-2 项
a = b;
// 当前计算出的斐波那契数 temp变为了新的 b ,即新的 i-1 项
b = temp;
}
return b;
}
int main() {
// 禁用 stdout 缓冲区
setbuf(stdout, nullptr);
int n = 1;
printf("第 %d 个斐波那契数是 %d\n", n, fib(n)); // 第 1 个斐波那契数是 1
n = 2;
printf("第 %d 个斐波那契数是 %d\n", n, fib(n)); // 第 2 个斐波那契数是 1
n = 3;
printf("第 %d 个斐波那契数是 %d\n", n, fib(n)); // 第 3 个斐波那契数是 2
n = 4;
printf("第 %d 个斐波那契数是 %d\n", n, fib(n)); // 第 4 个斐波那契数是 3
n = 5;
printf("第 %d 个斐波那契数是 %d\n", n, fib(n)); // 第 5 个斐波那契数是 5
n = 6;
printf("第 %d 个斐波那契数是 %d\n", n, fib(n)); // 第 6 个斐波那契数是 8
return 0;
}
```
## 2.2 可变参数(了解)
* 有的时候,函数参数的数量是不确定的,就可以使用 C 语言提供的`可变参数函数`,即:在声明可变参数函数的时候,使用省略号 `...` 来表示可变数量的参数。