[算法设计与分析]3.1.2递归设计要点(汉诺塔+整数的分划)
2018-03-31 14:52
856 查看
#include<stdio.h> #include<iostream> using namespace std; void Hanoi(int n, char A, char B, char C);//5.递归汉诺塔 int Divide(int n, int m, int len);//6.整数分划 void Output(int num[], int len); int divide[100] = {0}; int main () { Hanoi(3, 'A', 'B', 'C'); cout << Divide(4, 4, 0); } void Hanoi(int n, char a, char b, char c) { if(n == 0) return; Hanoi(n - 1, a, c, b); printf("remove %d from %c to %c\n", n, a, b); Hanoi(n - 1, c, b, a); } int Divide(int n, int m, int len) { if(n < 0 && m < 0) { printf("error"); return 0; } else if(n == 1 && m > 1) { divide[len] = 1; Output(divide, len + 1); return 1; } else if(n >= 0 && m == 1) { if(n == 0) { Output(divide, len); } else { divide[len] = 1; Divide(n - 1, m, len + 1); } return 1; } else if(n < m) { return Divide(n, n, len + 1); } else if(n == m) { divide[len] = m; Output(divide, len + 1); return Divide(n, m - 1, len) + 1; } else { divide[len] = m; return Divide(n - m, m, len + 1) + Divide(n, m - 1, len); } } void Output(int num[], int len) { for(int i = 0; i < len; i++) printf("%d ", num[i]); cout << endl; }
相关文章推荐
- 用递归法:设计算法求解汉诺塔问题,并编程实现。 (1) Hanoi(汉诺)塔问题分析 这是一个古典的数学问题,是一个用递归方法解题的典型例子。问题是这样的:古代有一个梵塔,塔内有3个座 A,B,C
- 算法分析与设计实验——汉诺塔
- 汉诺塔问题递归算法分析
- 分治与递归(算法分析与设计)
- 算法分析与设计基础(1)汉诺塔问题
- 汉诺塔问题递归算法分析:
- 汉诺塔问题递归算法分析
- [算法设计与分析]3.1.1循环设计要点(累加与累乘+判断完数+矩阵鞍点+打印规律图形)
- 整数划分问题算法分析与实现(递归)
- 【算法设计与分析】1、整数划分问题
- 算法设计与分析之循环与递归
- [Java算法分析与设计]二叉树非递归实现遍历
- 算法设计与分析之递归与分治策略
- 【算法与设计分析基础】大整数乘法int[]版+分治法求幂
- 算法设计与分析 快速排序的递归实现算法
- [算法设计与分析]3.2.4大整数存储及运算(高精度*长整数+n!)
- 【算法设计与分析】递归与分治----2.4 排列问题
- 算法设计课程总结1~2(渐进分析记号,复杂性比较,递归,分治)
- 【广告算法工程师入门 13】机制设计-私人价值模型下四种拍卖形式的报价策略与均衡分析
- 【算法设计与分析】经典代码赏析【1】