C 语言 递归
程序调用自身的编程技巧称为递归( recursion)。
递归做为一种算法在程序设计语言中广泛应用。
一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量
C 语言 递归
C 语言支持递归,即一个函数可以调用其自身。但在使用递归时,程序员需要注意定义一个从函数退出的条件,否则会进入死循环。
C 语言递归的语法格式如下:
void recursion() { recursion(); /* 函数调用自身 */ } int main() { recursion(); }
范例: 数的阶乘
下面的范例使用递归函数计算一个给定的数的阶乘
/** * file: main.c * author: 简单教程(www.twle.cn) */ #include <stdio.h> long factorial(unsigned int i) { if( i <= 1) { return 1; } return i * factorial(i - 1); } int main() { int i = 13; printf("%2d 的阶乘为 %5ld\n", i, factorial( i ) ); return 0; }
编译和运行上面的程序,输出结果如下
$ gcc main.c && a.out 13 的阶乘为 6227020800
范例: 斐波那契数列
下面的范例使用递归函数生成一个给定的数的斐波那契数列
/** * file: main.c * author: 简单教程(www.twle.cn) */ #include <stdio.h> int fibonaci(int i) { if(i == 0) { return 0; } if(i == 1) { return 1; } return fibonaci(i-1) + fibonaci(i-2); } int main() { int i; for (i = 0; i < 11; i++) { printf("%2d\t\n", fibonaci(i)); } return 0; }
编译和运行上面的范例,输出结果如下
$ gcc main.c && a.out 0 1 1 2 3 5 8 13 21 34 55