递归打印一个数所有加和的方式
2016-07-23 16:34
218 查看
例如:
6 = 5 + 1
6 = 4 + 1 + 1
6 = 3 + 1 + 1 + 1
6 = 2 + 1 + 1 + 1 + 1
6 = 1 + 1 + 1 + 1 + 1 + 1
6 = 2 + 2 + 1 + 1
6 = 3 + 2 + 1
6 = 4 + 2
6 = 2 + 2 + 2
6 = 3 + 3
测试:
6 = 5 + 1
6 = 4 + 1 + 1
6 = 3 + 1 + 1 + 1
6 = 2 + 1 + 1 + 1 + 1
6 = 1 + 1 + 1 + 1 + 1 + 1
6 = 2 + 2 + 1 + 1
6 = 3 + 2 + 1
6 = 4 + 2
6 = 2 + 2 + 2
6 = 3 + 3
#include<iostream> #include<stack> using namespace std; int number; stack<int> store; stack<int> backup; //min可以保证打印过程中前面的数始终大于后面的数 void print_rec(int num, int min){ if (num == 0 || num == 1) return; for (int i = num-1; i >= (num + 1) / 2; i--){ if (num - i >= min){ printf("%d = ", number); printf("%d + %d", i, num - i); while (!store.empty()){ printf(" + %d", store.top()); backup.push(store.top()); store.pop(); } printf("\n"); while (!backup.empty()){ store.push(backup.top()); backup.pop(); } store.push(num - i); print_rec(i, num - i); store.pop(); } } return; } int main(){ cin >> number; print_rec(number,1); return 0; }
测试:
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- C#递归算法之分而治之策略
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- C#算法之大牛生小牛的问题高效解决方法
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- 有关数据库SQL递归查询在不同数据库中的实现方法
- C#算法函数:获取一个字符串中的最大长度的数字
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#中的递归APS和CPS模式详解
- C#冒泡法排序算法实例分析