递归 - 算法学习
来源:互联网 发布:微单哪款好 最好知乎 编辑:程序博客网 时间:2024/06/05 02:42
递归按照递归方式可以分为直接递归和间接递归
1. 直接递归
递归过程p直接调用自己
2. 间接递归
p包含另一个过程d,而d又调用p
递归实例:
1. 汉诺塔问题
#include <stdio.h>#include <stdlib.h>void hanoi(int n, char a, char b, char c){ if(n == 1) printf("%c -> %c\n", a, c); else { hanoi(n-1, a, c, b); printf("%c -> %c\n", a, c); hanoi(n-1, b, a, c); }}int main(void){ int n; scanf("%d", &n); hanoi(n, 'A', 'B', 'C'); return 0;}
2. 八皇后问题
问题分析:
每一个点的行、列和两条对角线都不能造成冲突
(1)当每行被占领后,把相应的标志位置1,列也一样。
(2)对角线有两个方向,同一个对角线上的所有点(下标为(i, j)),那么(i+j)和(i-j都不能再被占用领)c[i+j]=1表示第(i+j)个对角线被占领,为0是代表为没有被占领,d[i-j]=1代表d[i-j]被占领。
#include <stdio.h>#include <stdlib.h>int a[8], b[24], c[24], d[24];void print(void){ static int i = 0; int j; i++; printf("%d: ", i); for(j = 0; j < 8; j++) printf("%d ", a[j+1]); putchar('\n');}void try(int i){ int j; for(j = 0; j < 8; j++) { if((b[j]==0) && (c[i+j]==0) && (d[i-j]==0)) { a[i] = j; b[j] = 1; c[i+j] = 1; d[i-j] = 1; if(i < 8) try(i+1); else print(); b[j] = 0; c[i+j] = 0; d[i-j] = 0; } }}int main(void){ int i; for(i = 0; i < 24; i++) { b[i] = 0; c[i] = 0; d[i] = 0; } try(1); return 0;}
3. 递归求一个数组的元素最大值
#include <stdio.h>#include <stdlib.h>int max(int arr[], int len){ if(len == 1) return arr[0]; int a = arr[0]; int b = max(arr+1, len-1); return (a>b ? a : b);}int main(void){ int n, i, x; int a[10]; scanf("%d", &n); for(i = 0; i < n; i++) { scanf("%d", &a[i]); } x = max(a, n); printf("%d\n", x); return 0;}
4. 递归逆序输出一个字符串
#include <stdio.h>#include <stdlib.h>void reverse(void){ char ch; scanf("%c", &ch); if(ch != '.') { reverse(); printf("%c", ch); }}int main(void){ reverse(); return 0;}
0 0
- 递归算法学习
- C#算法学习-->递归
- 递归 - 算法学习
- 递归算法的学习
- 算法学习笔记:递归
- 递归算法学习
- 递归算法的学习
- 算法学习1-递归
- 从递归算法开始学习
- 算法学习笔记 2.1递归
- 算法学习 - 01 递归讨论
- 递归算法学习---归并排序
- 算法学习10008(递归)
- 递归算法学习之斐波拉契
- C#学习笔记--递归算法
- 算法学习笔记--递归(1)
- 算法学习笔记之递归算法
- 《数据结构与算法》学习笔记21 递归_消除递归
- 真机iOS SDK升级后xcode不能进行真机调试 怎么办
- InputStream与OutputStream的比较
- 设置scrollView滚动到指定位置
- 归并排序
- js本地存储解决方案(localStorage与userData)
- 递归 - 算法学习
- java获取系统属性
- 五个最佳的编程文本编辑器
- 纠结了一晚上,关于CSS中Position属性
- 项目开发定时功能的实现
- 机器学习实战——预测数值型数据:回归
- CPC/CPM/CPA/CPS分别代表什么意思
- JSON.stringify 语法实例讲解
- 致我终将逝去的青春