递归解决遍历问题
时间:2022-07-23
本文章向大家介绍递归解决遍历问题,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
参考文献 《算法竞赛宝典》--张新华
算法流程
//递归解决枚举问题
//
// Created by cloud on 2019/5/4.
//
//全排列算法-深搜字典序
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
int a[10000], Count, DNAsequences_length, DNABase_types;
void print() {
for (int k = 1; k < DNAsequences_length + 1; k++)
cout << a[k];
cout << "n";
Count++;
}
void dfs(int i) {
if (i > DNAsequences_length)//递归结束,打印结果,递归的深度即为DNAsequences_length
print();
else
for (int k = 1; k <= DNABase_types; k++) {
a[i] = k-1;//赋值 a[1]=0,
dfs(i + 1);
//这个for循环一直很奇妙因为我不知道这个for循环什么时候才能停止下来
// cout<<k<<endl;
/* //1.发现DNA长度达到DNAsequences_length后才会输出k,认为是dfs函数达到条件后才退出
//2.在Test3length.txt中的结果显示
//k=1 a[1]=1
//dfs(2)
//k=1 a[2]=1
//dfs(3)
//k=1 a[3]=1
//dfs(4)
//调用print函数,依次输出a[1],a[2],a[3]
// 111--根据下一步输出是112推断程序发生了a[3]=2这种改变,即k=2,i=3
//此时程序退回到dfs(3),执行输出k=1,并将k+1
//因此a[3]=2,执行dfs(4)在执行print()函数
// 112
//程序又退回到dfs(3),执行输出k=2,并将k+1
//因此a[3]=3,执行dfs(4)在执行print()函数
// 113
//程序又退回到dfs(3),执行输出k=3,并将k+1,
//因此a[3]=4,执行dfs(4)在执行print()函数
//114
//程序又退回到dfs(3),执行输出k=4,并将k+1=5,已经不满足for循环的条件了
//则程序退回到dfs(2),k=1时,输出k,并将k+1=2
//a[2]=2
//程序进入dfs(3),k=1,a[3]=1,程序进入dfs(4),输出121,退出dfs(4),进入dfs(3),输出k=1
//k=k+1,a[3]=2,程序进入dfs(4),输出122,退出dfs(4),进入dfs(3),输出k=2
//...*/
}
// i的值在函数调用内会不断的增加直到超越DNAsequences_length即最终终止此函数的条件是i=DNAsequences_length+1
}
int main() {
freopen("V0in.txt", "r", stdin); //输入重定向,输入数据将从V0in.txt文件中读取
freopen("V0out.txt", "w", stdout); //输出重定向,输出数据将保存在V0in.txt文件中
cin >> DNAsequences_length; // DNAsequences_length是指需要全排序使用的元素个数
cin >> DNABase_types;//表示生成序列的长度
dfs(1);
cout << Count << endl;
// Count是一个全局变量,用于统计一共生成的序列数
fclose(stdin);//关闭文件
fclose(stdout);//关闭文件
return 0;
}
结果
- V1in.txt
- WAMP配置虚拟主机
- linux开关端口问题
- Python 3.6实现单博主微博文本、图片及热评爬取
- 用Django实现一个可运行的区块链应用
- Python的dict实现原理及与Java的比较探究
- 关于位域如何节省内存(C++)
- mysql的小知识点(关于数据库的导入导出 对于windows)
- Python网络编程中的套接字名和DNS解析
- hdu 4009 Transfer water(最小型树图)
- NumPy二元运算的broadcasting机制
- md5算法原理一窥(其一)
- 实现属于自己的TensorFlow(一) - 计算图与前向传播
- 基于Sanic的微服务基础架构
- hdu 3038 How Many Answers Are Wrong ( 带 权 并 查 集 )
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 4.2 synchronized补充
- 解决 Maven 使用Tomcat 部署报错 Tomcat return http status error: 405, Reason Phrase: Method Not Allowed:
- spring5源码 -- IOC容器设计理念和核心注解的作用
- 1. spring5源码 -- Spring整体脉络 IOC加载过程 Bean的生命周期
- Cookie详解
- 2.1 Spring5源码--源码编译
- WebLogic 10 容器通过JNDI切换数据源
- 2.2 spring5源码 -- ioc加载的整体流程
- Js 删除 指定Domin 指定 path 下的 cookie中指定的内容
- 适配器模式与装饰器模式的区别
- java堆内存详解
- springBoot 入门(一)—— 使用idea创建第一个springBoot项目
- “dddb超级”工具包——高效、快速开发JavaWeb项目后端结构
- 在Java Web中设计的编解码
- 怎么让用一行代码实现页面的定时强制刷新?脚本刷流量再也不用愁了!