【数据结构与算法】(五) c 语言递归与汉诺塔实现
来源:互联网 发布:自己怎么制作软件 编辑:程序博客网 时间:2024/04/20 03:51
递归思想:把规模为 n 的问题减小到 n-1 来解决
技巧:不要考虑具体程序是怎么实现的,而是关注如何把规模为 n 的问题减少到 n-1
递归求阶乘 和 递归求 1+2+...+n 的和
//// main.c// testFactorial//// Created by lan on 16/3/12.// Copyright © 2016年 lan. All rights reserved.//// 规模 n 的解决依赖于 n-1 的解决#include <stdio.h>// 求 n 的阶乘long f(long n) { if (1 == n) { return 1; } else { return n * f(n-1); }}// 求 1 + 2 + .. + n 的和long f1(long n) { if (1 == n) { return 1; } else { return n + f1(n-1); }}int main(int argc, const char * argv[]) { printf("%ld\n", f(5)); printf("%ld\n", f1(5)); return 0;}
输出结果:
12015Program ended with exit code: 0
汉诺塔
//// main.c// testHanoi//// Created by lan on 16/3/13.// Copyright © 2016年 lan. All rights reserved.//#include <stdio.h>void hanoi(int n, char A, char B, char C) {/* 函数的功能:把柱子 A 上的 n 个盘子借组 B 移动到 C 如果是 1 个盘子: 直接把 A 柱子上的盘子从 A 移到 C 否则: 先将 A 柱子上的 n-1 个盘子借助 C 移到 B (和函数功能重合,规模从 n 减到 n-1) 直接把 A 柱子上的盘子从 A 移到 C 把柱子 B 上的 n-1个盘子借助 A 移到 C(和函数功能重合) */ if (1 == n) { printf("将编号为 %d 的盘子直接从 %c 柱子移到 %c 柱子\n", n, A, C); } else { hanoi(n-1, A, C, B); printf("将编号为 %d 的盘子直接从 %c 柱子移到 %c 柱子\n", n, A, C); hanoi(n-1 , B, A, C); }}/* 盘子数 程序执行次数 n = 1 1 n = 2 3 n = 3 7 ... ... 汉诺塔的复杂度为 2 的 n 次方减 1 */int main(int argc, const char * argv[]) { int n; printf("输入移动盘子的个数 n = "); scanf("%d", &n); hanoi(n, 'A', 'B', 'C'); return 0;}
输入移动盘子的个数 n = 3将编号为 1 的盘子直接从 A 柱子移到 C 柱子将编号为 2 的盘子直接从 A 柱子移到 B 柱子将编号为 1 的盘子直接从 C 柱子移到 B 柱子将编号为 3 的盘子直接从 A 柱子移到 C 柱子将编号为 1 的盘子直接从 B 柱子移到 A 柱子将编号为 2 的盘子直接从 B 柱子移到 C 柱子将编号为 1 的盘子直接从 A 柱子移到 C 柱子Program ended with exit code: 0
0 0
- 【数据结构与算法】(五) c 语言递归与汉诺塔实现
- 【数据结构与算法】汉诺塔算法——C语言递归实现
- 【数据结构与算法】汉诺塔算法——C语言递归实现
- 数据结构与算法之五(递归与递归消除)
- C语言数据结构实现二叉树递归与非递归遍历(数据结构第四次实验)
- C语言数据结构----栈与递归
- 【数据结构与算法】递归汉诺塔
- 【数据结构与算法】汉诺塔递归
- 【数据结构与算法】汉诺塔算法——java递归实现
- (c#)数据结构与算法分析 --递归
- 数据结构与算法分析-用C语言实现单链表
- 数据结构与算法分析 C语言描述 单链表的实现
- 《数据结构与算法》-单链表基本操作的C语言实现
- 【数据结构与算法】(三) c 语言栈的简单实现
- 算法与数据结构-堆的基本操作C语言实现
- 算法与数据结构-队列的基本操作C语言实现
- 算法与数据结构-栈的基本操作C语言实现
- 算法与数据结构-堆的基本操作C语言实现
- GIS 中地理坐标和屏幕坐标的标准转换方法
- 机器学习:序列模式挖掘算法
- java : 普通代码块,构造代码块,静态代码块区别及代码示例
- C小加 之 级数求和
- 快速排序
- 【数据结构与算法】(五) c 语言递归与汉诺塔实现
- 第三周项目3:输出星号图(1)
- Hadoop “Unable to load native-hadoop library for your platform” warning
- Android 中 handle Message 的简单使用笔记
- FILE,fd和内核对象
- CTF比赛的一道javascript题
- 求数列的全排列(递归解法)
- POJ 2559 水题
- css样式大全