首页 / 更多教程 / 搜索 递归 具体运行流程
搜索 递归 具体运行流程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了搜索 递归 具体运行流程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2840字,纯文字阅读大概需要5分钟。
内容图文
**
一般初学者在看搜索的时候,很可能被递归给扰乱,不知道每个数都是怎么变化的,怎么算出来的,以下就是最简单的题的所有计算流程,手算不易求支持
**
**
题目描述
**
排列与组合是常用的数学方法。
先给一个正整数 ( 1 < = n < = 10 )
例如n=3,所有组合,并且按字典序输出:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
输入
输入一个整数n( 1<=n<=10)
输出
输出所有全排列
每个全排列一行,相邻两个数用空格隔开(最后一个数后面没有空格)
**
最简单的搜索入门题,AC代码如下,随后就是运行流程,方便理解怎么递归的
**
#include<iostream>
using namespace std;
int n;
int vis[10];
int a[10];
void dfs(int index){
if(index == n){ //AAA
for(int i = 0; i < n ;i++) cout << a[i];
cout << endl;
return;
}
else{
for(int i =1; i <= n ;i++){ //BBB
if(!vis[i]){ //CCC 判断 vis 是不是0 是0 下一步
vis[i] = 1;
a[index] = i;
dfs(index + 1);
a[index] = 0;
vis[i] = 0;
}
}
}
}
void init(){
for(int i = 0; i<9 ;i++)
vis[i] = 0;
}
int main(){
while(cin >> n){
dfs(0);
init();
}
return 0;
}
以下为方法 vis ,递归的运行流程,把每一步的每一个数的结果,流程全部都写出来了。
具体运行如下
(cin << 3;) //以输入n为3作例
index = 0 != n //对应AC代码注释的AAA
else for i = 1 //对应AC代码注释的BBB
if == 0 //对应AC代码注释的CCC
vis[1] = 1 //记下来是否用过的记录
a[0] = 1 //记下来运算答案
dfs(1) >>> index = 1 //开始递归
for i = 1 //对应AC代码注释的BBB
if != 0 //对应AC代码注释的CCC
for i = 2
if == 0
vis[2] =1
a[1] =2
dfs(2) >>> index =2
for i = 1
if != 0
for i = 2
if != 0
for i = 3
if == 0
vis[3] =1
a[2] =3
dfs(3) >>> index = 3 = n //对应AC代码注释的AAA
cout << a{} //1 2 3
return
vis[3] =0
a[2] =0 //去掉标记
vis[2] =0
a[1] =0
for i = 3 //对应AC代码注释的BBB
if == 0 //对应AC代码注释的CCC
vis[3] =1
a[1] =3
dfs(2) >>> index =2
for i = 1
if != 0
for i = 2
vis[2] =1
a[2] =2
dfs(3) >>> index = 3 = n
cout << a{} //1 3 2
return
vis[2] =0
a[2] =0
for i = 3
if != 0
vis[3] =0
a[1] =0
for i = 2 //对应AC代码注释的BBB
if == 0 //对应AC代码注释的CCC
vis[2] =1
a[0] =2
(vis[i] = 1 , a[index] = i , dfs(index)) //把变量的运算再写过来,不用再看AC代码了
dfs(1) >>> index = 1
for i = 1
if == 0
vis[1] =1
a[1] =1
dfs(2) >>> index =2
for i = 1
if != 0
for i = 2
if != 0
for i = 3
vis[3] =1
a[2] =3
dfs(3) >>> index = 3 = n
cout << a{} //2 1 3
return
vis[3] =0
a[2] =0
for i = 2
if != 0
for i = 3
if == 0
vis[3] =1
a[1] =3
dfs(2) >>> index =2
for i = 1
if == 0
vis[1] =1
a[2] =1
dfs(3) >>> index = 3 = n
cout << a{} //2 3 1
return
vis[1] =0
a[2] =0
for i = 2
if != 0
for i = 3
if != 0
vis[3] =0
a[1] =0
for i = 3
if == 0
vis[3] =1
a[0] =3
(vis[i] = 1 , a[index] = i , dfs(index))
dfs(1) >>> index = 1
for i = 1
if == 0
vis[1] =1
a[1] =1
dfs(2) >>> index =2
for i = 1
if != 0
for i = 2
if == 0
vis[2] =1
a[2] =2
dfs(3) >>> index = 3 = n
cout << a{} //3 1 2
return
vis[2] =0
a[2] =0
for i = 3
if != 0
for i = 2
if == 0
vis[2] =1
a[1] =2
dfs(2) >>> index =2
for i = 1
if == 0
vis[1] =1
a[2] =1
dfs(3) >>> index = 3 = n
cout << a{} //3 2 1
return
vis[1] =0
a[2] =0
for i = 2
if != 0
for i = 3
if != 0
vis[3] =0
a[1] =0
for i = 3
if != 0
内容总结
以上是互联网集市为您收集整理的搜索 递归 具体运行流程全部内容,希望文章能够帮你解决搜索 递归 具体运行流程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。