第二章 递归
来源:互联网 发布:大麦户源码安装教程 编辑:程序博客网 时间:2024/06/05 09:59
Ackerman函数
#include<iostream>#include<cstdio>int n,m;using namespace std;int f(int n,int m){ if(n==1&&m==0) return 2; else if(n==0&&m>=0) return 1; else if(n>=2&&m==0) return n+2; else if(n>=1&&m>=1) return f(f(n-1,m),m-1);}int main(){ while(cin>>n>>m) { cout<<f(n,m)<<endl; }}
当m=1时,A(n,1)是函数乘2
当m=2时,A(n,2)是函数2的n次方
当M=3时,A(n,3)是2的2的2的2的。。。次方,其中2的层数为n
全排列问题
#include<iostream>#include<cstdio>int n,m;using namespace std;template <class Type>inline void Swap(Type &a,Type &b){ Type temp=a;a=b;b=temp;}template <class Type>void prem(Type list[],int k,int m){ //产生list[k:m]的所有排列 if(k==m) { //只剩下一个元素 for(int i=1;i<=m;++i) cout<<list[i]; cout<<endl; } else for(int i=k;i<=m;++i) { Swap(list[k],list[i]); prem(list,k+1,m); Swap(list[k],list[i]); }}int main(){ int n; cin>>n; int a[n]; for(int i=1;i<=n;++i) cin>>a[i]; prem(a,1,5);}
整数划分问题
例如,正整数6有如下11中不同的划分
6:
5+1
4+2, 4+1+1
3+3, 3+2+1, 3+1+1+1
2+2+2, 2+2+1+1, 2+1+1+1+1
1+1+1+1+1+1
#include<iostream>#include<cstdio>int n,m;using namespace std;int q(int n,int m){ if(n<1||m<1) return 0; if(n==1||m==1) return 1; if(n<m) return q(n,n); if(n==m) return q(n,m-1)+1; return q(n,m-1)+q(n-m,m);//n>m>1}int main(){ while(cin>>n>>m&&n) { cout<<q(n,m)<<endl; }}
整数划分问题
#include<iostream>#include<cstdio>#include<cmath>using namespace std;int solve(int n,int m){ if(m<1||n<1) return 0; if(n<m) return solve(n,n); if(n==1||m==1) return 1; if(n==m) return 1+solve(n,n-1); if(n>m&&m>1) return solve(n,m-1)+solve(n-m,m);}int main(){ int n,m; while(cin>>n>>m) { cout<<solve(n,m)<<endl;; }}
Hanoi问题
#include<iostream>#include<cstdio>#include<cmath>using namespace std;void Move(int n,char a,char b){ cout<<n<<" from "<<a<<" to "<<b<<endl;}void Hanoi(char a,char b,char c,int n){ if(n>0) { Hanoi(a,c,b,n-1); Move(n,a,b); Hanoi(c,b,a,n-1); }}int main(){ int n; while(cin>>n) { Hanoi('a','b','c',n); }}
要求把N个盘子从A借助C移到B,思路是先把上面的N-1个盘子通过B移到C上,然后把下面最大的盘子移到B上,再把上面的N-1个盘子移到B上。
0 0
- 第二章 递归
- 第二章 递归与分治策略
- 第二章 递归与分治策略
- 第二篇 递归思想
- 马士兵java视频学习笔记第二章:递归调用
- 算法设计与分析:第二章 递归 2.2买商品
- 算法设计与分析:第二章 递归 2.7全排列
- 《算法》第二章——快排非递归实现
- 算法珠玑第三章第二题线性递归级数
- 概率机器人 第二章 递归状态估计(贝叶斯滤波)
- 马士兵J2SE-第二章-J2SE基础语法(周六补充)-递归、非递归
- 算法设计与分析:第二章 递归 2.6基于递归的插入排序
- 第二章之“二分查找”(递归实现,练习2.3-5)
- 算法设计与分析:第二章 递归 2.1计数排序之统计数对
- 算法设计与分析:第二章 递归 2.4报数退圈游戏
- 算法设计与分析:第二章 递归 2.5斜数组之找规律
- 算法设计与分析:第二章 递归 2.7多项式求值问题
- 算法竞赛入门经典(第二版)-刘汝佳-第四章 函数与递归 刽子手游戏
- 安装maven遇到的问题
- Tensorflow实现最近邻
- 判断一棵树是不是二叉搜索树
- xCode8 ios10再次开发记录
- LeetCode刷题(C++)——Construct Binary Tree from Inorder and Postorder Traversal(Normal)
- 第二章 递归
- CSDN日报20170428 ——《你的开发为何如此低效?》
- 网络层-ICMP(互联网消息控制协议)
- Linux基础学习笔记之screen命令
- 关于三级管总结
- 作业优先调度算法 先来先服务、短作业调度算法(c语言描述)
- Tensorflow实现多层感知器
- Python机器学习库SKLearn分类算法之朴素贝叶斯
- Python 文件操作 -- 常更