给定一个字符数组:
1、倒序打印这个数组
2、反转这个数组
对于需求1递归到最后,直接打印当前的下标即可。
static void reservePrint(char[] s,int start)//反转打印
{
if(start==s.length)
return;
reservePrint(s,start+1);
System.out.println(s[start]);
}
对于需求2如果按我的递归思路来,就是:把当前下标后面的全部反转好,然后把当前下标插入最后一位,其他人往前挪挪。这样的结果是要挪的东西太多了。
但是这种基于分治的递归,时间复杂度为n.
static void reserveArray(char[] s,int start,int end)//原地反转
{
if(start>=end)
{
return;
}
char temp=s[start];
s[start]=s[end];
s[end]=temp;
reserveArray(s,start+1,end-1);
}