FJ的字符串 递归
问题描述 FJ在沙盘上写了这样一些字符串:
A1 = “A”
A2 = “ABA”
A3 = “ABACABA”
A4 = “ABACABADABACABA”
… …
你能找出其中的规律并写所有的数列AN吗?
输入格式 仅有一个数:N ≤ 26。
输出格式 请输出相应的字符串AN,以一个换行符结束。输出中不得含有多余的空格或换行、回车符。
样例输入3
样例输出ABACABA
这道题,仔细分析需要输出的数据,觉得怎么有点熟悉呢?再结合N的范围,可以知道,就是一个关于26个大写字母的递推式啊。第n个递推式的内容就是:“第n-1个递推式”“大写字母N”“第n-1个递推式”。那么解决的时候就可以用递推的思想了啊!
因为递推与递归思想类似,只是一个自底向上,另一个自顶向下,所以我选择的是递归算法(因为我不是特别会递归,所以想进行练习):调用“第n-1个递推式”,输出“大写字母N”,再次调用“第n-1个递推式”。
按照递归的三要素进行分析,就是:
1、确定递归功能:输出第n项的递推式(输出时包含了第n-1项的内容)
2、确定递归结束条件:n==1时,输出A
3、确定递归表达式:
letter(n-1);
printf("%c",n-1+‘A’);
letter(n-1);
//letter为递归函数名
一定要记清楚递归函数的定义:函数对自身进行调用
下面,放上我的第一个成功的递归源码:
#include<stdio.h>
int letter(int n)
{
if(n==1)
printf("A");
else
{
letter(n-1);
printf("%c",n-1+'A');
letter(n-1);
}
return 0;
}
int main()
{
int n;
scanf("%d",&n);
letter(n);//开启递归调用
return 0;
}