递归
递归的定义
- 若一个对象部分地包含它自己,或用它自己给自己定义,则称这个对象是递归的。
- 若一个过程直接地或间接地调用自己,则称这个过程是递归的过程。
- 求 n 的阶乘
- 斐波拉切序列
- 汉诺塔等
需要用到递归的情况
-
递归定义的数学函数
- 阶乘问题
- 2 阶的斐波拉契序列
-
具有递归特性的数据结构
- 二叉树
- 广义表
-
可递归求解的问题
-
迷宫问题
-
汉诺塔问题
-
递归的思想
-
用分治法求解
分治法:对于一个较为复杂的问题,能够分解成几个相对简单的且解法相同或类似的子问题来求解
-
必备的三个条件
能够将一个问题转变成一个新问题,而新问题与原问题的解法相同或类同,不同的仅是处理的对象,且这些对象的变化是有规律的
可以通过上述转化而使新问题简化
必须有一个明确的递归出口,或称递归的边界
分治法求解递归问题的一般形式
void p(参数表)
{
if(递归条件结束)
可直接求解步骤 基本项
else
p(较小的参数) 归纳项
}
示例
#include<stdio.h>
static void binary_to_ascii(unsigned int value)
{
unsigned int quotient;
quotient = value / 10;
if(quotient != 0)
binary_to_ascii(quotient);
printf("%d ",value & 10 + '0');
printf("\r\n");
}
int main(int argc, char *argv[])
{
printf("hello tyustli\r\n");
binary_to_ascii(4237);
return 0;
}
/**
* 编译:gcc -o test test.c
* 运行:./test
* 结果
* 4
* 2
* 3
* 7
*/