递归过程中如何处理字符数组的输出
有些递归函数要求求返回值,而有些递归函数则要求输出题目要求的字符数组。
全排列问题:
#include <iostream>
#include <cstring>
using namespace std;
char buffer[6];
int b = 0;
void FullSeq(int SeqLength,char s[])
{
if(SeqLength == 0)
{
cout << buffer << endl;
return ;
}
for(int i=0;s[i];++i)
{
if(s[i] == '1') continue;
buffer[b++] = s[i];
char tmp = s[i];
s[i] = '1'; //标记已输出的字符 ,不能用-1标记,-1是两个字符
FullSeq(SeqLength-1,s);
s[i] = tmp;//在以s[i]开头的全排列输出后还原已输出的字符
b--;
}
}
int main()
{
char s[6];
cin >> s;
FullSeq(strlen(s),s);
return 0;
}
对于一个输入的字符串,输出的字符串有多种可能,因此不能使用
输出一个字符
递归调用函数(SeqLength-1,s);
这样的话,对于长度为SeqLength的输入,只有一个输出。
本程序中采用了buffer数组记录每一步递归时累积产生的字符串,方便输出所有可能。
2的幂次方表示:
#include <iostream>
using namespace std;
void BinaryExp(int n)//n为正整数
{
int result[20]; //设输入数据为1的位数最大20个
int Length=0; //记录当前位数
int j=0; //记录result数组有效长度
while(n != 0)
{
if(n % 2 == 1) result[j++] = Length;
n/=2;
Length++;
}
for(int i=j-1;i>=0;--i)
{
if(result[i] >= 2)
{
cout <<"2(";
BinaryExp(result[i]);
cout << ")";
}
else if(result[i] == 1) cout << "2";
else if(result[i] == 0) cout << "2(0)";
if(i > 0) cout << "+" ;
}
}
int main()
{
int n;
cin >> n;
BinaryExp(n);
return 0;
}
对于某个输入n,程序只会对应输出一个结果,所以不需要:使用buffer数组
总结:当递归程序需要输出某个字符串,且一个递归函数对应多个输出字符串时,采用buffer数组记录递归时产生的每一步输出