问题描述
FJ在沙盘上写了这样一些字符串:
A1 = “A”
A2 = “ABA”
A3 = “ABACABA”
A4 = “ABACABADABACABA”
… …
你能找出其中的规律并写所有的数列AN吗?
这里我们使用两种方法来实现:
方法一:采用循环来做
方法二:采用递归来做
具体代码如下:
import java.util.Scanner;
public class Fj的字符串 {
/**
* 问题描述
FJ在沙盘上写了这样一些字符串:
A1 = “A” //当等于1的时候也就是ASCII等于1+64的值
A2 = “ABA” //当等于2的时候 “中间的值” 也就是ASCII等于2+64的值,而两边则是前一个的字母
A3 = “ABACABA” //当等于3的时候 “中间的值” 也就是ASCII等于3+64的值,而两边则是前一串的字母
A4 = “ABACABADABACABA” .......
… …
你能找出其中的规律并写所有的数列AN吗?
*/
//方法二的递归:
public static String f(int s ,String b,int a ){
char c; //定义变量
if(a==1){ //如果a=1就直接返回字符串“A”;
return "A";
}
c=(char)(s+64); //变量自增
b=b+""+c+""+b; //字符串叠加
if (s>=a) { //如果大于等于a直接返回字符串b;
return b;
}
return f(s+1,b,a); //s自增;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int a=sc.nextInt(); //定义用户输入的数字
//方法一:
String b="A" ; //设置起始值
char c; // 定义变量,
if (a==1) { //如果用户输入的数字是1,
System.out.println("A"); //那么直接输出A,
return; //结束下面的语句
}
for (int i = 2; i <=a; i++) { //如果大于1则循环下面的语句
c=(char)(i+64); //定义中间变量
b=b+""+c+""+b; //然后给b重新赋值
}
System.out.println(b);//最后输出b
//方法二:
int s = 2;
String b = "A";
System.out.println(f(s,b, a));
}
}
程序调试结果:
4
第一种调试结果:ABACABADABACABA
第二种调试结果:ABACABADABACABA