📅  最后修改于: 2023-12-03 15:10:02.527000             🧑  作者: Mango
这里介绍一种使用递归方法打印给定字符串的所有排列的 C++ 程序。
排列是指从一组数字或者字符中取出一些元素进行组合,不同取法形成的序列就叫做排列。在这个程序中,我们要打印出给定字符串的全排列,也就是字符串中所有字符的不同组合。
这个问题可以通过递归来解决。我们可以将给定字符串分为两个部分:第一个字符和剩余的字符。第一步我们先把第一个字符与后面的字符逐一交换位置,得到新的字符串;接着,对新的字符串进行递归,直到字符串长度为1时,输出排列结果为止。
下面是 C++ 的程序代码:
#include <iostream>
#include <string>
using namespace std;
void permutation(string s,int begin,int end)
{
if(begin == end)
cout<<s<<endl;
else
{
for(int i=begin;i<=end;i++)
{
swap(s[i],s[begin]);
permutation(s,begin+1,end);
swap(s[i],s[begin]);
}
}
}
int main()
{
string s="abcd";
permutation(s,0,s.length()-1);
return 0;
}
首先声明一个 permutation
函数,参数为 string
类型的字符串 s
和两个整数型参数 begin
和 end
。其中, begin
为字符串 s
的起始位置, end
为字符串 s
的结束位置。
若 begin = end
,即 s
是最后一个字符,则打印 s
。
若 begin < end
,则递归的进行以下步骤:
a. 将字符串 s
中第 begin
个字符与后面的字符逐一交换位置。
b. 对新的字符串进行递归,即 permutation(s,begin+1,end)
。
c. 恢复第 begin
个字符与后面的字符的位置,即 swap(s[i],s[begin])
。
在 main
函数中,声明一个字符串 s
,然后调用 permutation
函数,并输入参数 s
、0
和 s.length()-1
。
输入字符串 "abcd"
,程序输出如下:
abcd
abdc
acbd
acdb
adcb
adbc
bacd
badc
bcad
bcda
bdca
bdac
cbad
cbda
cabd
cadb
cdab
cdba
dbca
dbac
dcba
dcab
dacb
dabc
以上是一个简单的通过递归来打印给定字符串的所有排列的 C++ 程序。通过这个方法,我们可以更直观地体会到递归的思想和应用,掌握递归函数的实现和调用方法。