函数的递归
函数的递归是指函数直接或间接地调用自身的过程。递归在解决一些问题时非常方便,比如计算阶乘、斐波那契数列等。
#include <stdio.h>
int factorial(int n) {
if (n == 0 || n == 1)
return 1;
else
return n * factorial(n - 1);
}
int main() {
int n = 5;
printf("%d 的阶乘是 %d\n", n, factorial(n));
return 0;
}
在这个例子中,factorial
函数直接调用了自身来计算阶乘。
函数指针的高级用法
除了基本的函数指针用法外,函数指针还可以用于实现更复杂的功能,比如函数的回调、函数的动态绑定等。
#include <stdio.h>
//定义一个函数,利用数组参数来控制指针函数。
void process(int (*func)(int), int *array, int size) {
for (int i = 0; i < size; i++) {
printf("%d ", func(array[i]));
}
printf("\n");
}
//平方
int square(int num) {
return num * num;
}
//立方
int cube(int num) {
return num * num * num;
}
int main() {
int numbers[] = {1, 2, 3, 4, 5};
int size = sizeof(numbers) / sizeof(numbers[0]);
printf("数组的平方:");
process(square, numbers, size);
printf("数组的立方:");
process(cube, numbers, size);
return 0;
}
在这个例子中,process
函数接受一个函数指针作为参数,然后将这个函数指针传递给 func
参数指定的函数来处理数组中的每个元素。
函数式编程
函数式编程是一种编程范式,它将计算过程视为函数之间的转换。在C语言中,虽然不是一种纯粹的函数式编程语言,但是你仍然可以使用函数指针和递归等技术来实现函数式编程的思想。
#include <stdio.h>
//加法
int add(int a, int b) {
return a + b;
}
//减法
int subtract(int a, int b) {
return a - b;
}
//指针函数为参数的函数
int apply(int (*func)(int, int), int a, int b) {
return func(a, b);
}
int main() {
int a = 5, b = 3;
printf("5 + 3 = %d\n", apply(add, a, b));
printf("5 - 3 = %d\n", apply(subtract, a, b));
return 0;
}
在这个例子中,apply
函数接受一个函数指针和两个参数,并调用这个函数指针指向的函数来应用这两个参数。