求求求求改进程序,C/C++蓝桥杯FJ字符串

问题描述
  FJ在沙盘上写了这样一些字符串:
  A1 = “A”
  A2 = “ABA”
  A3 = “ABACABA”
  A4 = “ABACABADABACABA”
  … …
  你能找出其中的规律并写所有的数列AN吗?
输入格式
  仅有一个数:N ≤ 26。
输出格式
  请输出相应的字符串AN,以一个换行符结束。输出中不得含有多余的空格或换行、回车符。
样例输入
3
样例输出
ABACABA
#include"iostream"
using namespace std;
long N=1500000;
long n; //字符串长度
int k,record; //k为题目第N行,rerocd记录
void recursion(char ch[],int i) //递归
{
if(k==record)
return;
record++;
long j,m=n;

ch[n++]=65+i; //将下一个字母存进来
ch[n]='\n';

for(j=0;j ch[n++]=ch[j];
ch[n]='\n';
recursion(ch,i+1);
}
int main()
{
char ch[N];
long i=0;
cin>>k;
recursion(ch,0);
while(ch[i]!='\n')
cout<<ch[i++];
cout<<endl;
cout<<n<<endl;
return 0;
}


图片说明
这张图片是我输入k=20情况,这时候字符串长度n已经100万多长了。。然而我想增加宏定义N 长度 。。增加到200万的时候,程序就奔溃了。。但是题目要求k<=26.
请问有什么办法改进。

如楼上用递归是可以的 不过使用递归的话会调用很多次递归函数 可以使用循环,这可能会需要很大的空间,从1开始计算要输出的字符串,并依次推出下个数字要输出的字符串直到到达n. 如图给出了两种方法的代码 注释掉了递归函数的调用,两种方法时效性差不多,亲测n为20都需要55秒左右,至于空间消耗 递归每次调用都会产生额外的消耗 至于哪个消耗更大 楼主自己查算一下看 不是特别清楚图片

这是一个类似斐波那契数列的题目,格式是An=A(n-1)+"Char{n}"+A(n-1);每一个字符串都是前一个字符串的合并,也就是说大部分的字符空间存的都是冗余的数据,所以你可以让每个单元都存放自己添加的那部分,到最后输出再一起拼接。手头没有C的编译环境,本人已经用Java验证可行了。

我认为该题根本不需要存储,只要输出就行了。
#include "stdafx.h"
#include
void out_n(int n);
using std::cout;
using std::cin;
using std::endl;
int _tmain(int argc, _TCHAR* argv[])
{
cout << "Enter an Integer:" << endl;
int n;
cin >> n;
if (n > 0 && n < 27)
out_n(n);
system("pause");
return 0;
}

void out_n(int n)
{
if (n == 1)
cout << 'A';
else
{
out_n(n - 1);
cout << char('A' + n-1);
out_n(n - 1);
}
}

非要用你的程序存储一下再输出的话需要把N改为67108864以上,因为A26等于2的26次方减1,也就是67108863,你的数组越界导致 了错误