您好我正在尝试使用递归创建一个以相反顺序打印char数组的方法?
这是我到目前为止所做的: -
public class StringReverseOnCharArray {
public static void main(String[] args) {
reverseRecursively(new char[]{'a','b','c'});
}
private static void reverseRecursively(char[] myCharArr)
{
System.out.println(myCharArr[myCharArr.length-1]);
char [] temp=
// what next??
reverseRecursively(temp);
}
}
我认为临时字符数组会做,但我该怎么做才能删除原始字符数组中的最后一个元素并创建一个临时字符?或者是否有其他方式这样做?
答案 0 :(得分:1)
您可以使用System.arraycopy
答案 1 :(得分:1)
这是一个解决方案。
private static void reverseRecursively(char[] myCharArr, int next) {
if (next >= myCharArr.length)
return;
// use recusion BEFORE printing in order to print in reversed order
reverseRecursively(myCharArr, next+1);
System.out.println(myCharArr[next]);
}
首先调用该方法应该使用0作为“next”索引:
reverseRecursively(myCharArr, 0);
答案 2 :(得分:0)
正如所指出的,这不是正常的递归。所以这个解决方案并不好,但它确实有效:
public class StringReverseOnCharArray {
public static void main(String[] args) {
reverseRecursively(new char[] { 'a', 'b', 'c' });
}
private static void reverseRecursively(char[] myCharArr) {
if (myCharArr.length > 0) {
System.out.println(myCharArr[myCharArr.length - 1]);
char[] temp = new char[myCharArr.length - 1];
for (int i = 0; i < temp.length; i++) {
temp[i] = myCharArr[i];
}
reverseRecursively(temp);
}
}
}
答案 3 :(得分:0)
更新回答:
我想我误会了。如果你有使用声明的函数,只需填入temp
位,你就必须以相反的顺序输出数组(实际上并没有改变)它的内容),然后很简单:只需使temp
数组的length - 1
个字符的副本(可能使用System.arraycopy
)并将新的较短的数组传递给函数。如果您收到的数组只有一个字符,请不要这样做;这是你的递归终止条件(你总是必须有一些东西来阻止递归,它应该是你在看一些递归的事情时想到的第一件事)。
原始回答:
在我看来,一个告诉你使用错误技术解决问题的任务并不是一个非常有用的任务。递归有各种适当的教学练习;这不是其中之一。
但是让我们来看看作业:
递归的目标基本上是在问题的不同部分重复做一些事情,直到你完成整个问题。更好的例子是循环遍历树结构。
所以看看这个问题,你的目标是交换数组中的字符,直到数组被反转。这里重复的是什么?交换字符。
所以我可能通过将一个索引传递给函数来实现它,并让函数将该索引处的字符与length - index
位置处的字符交换(例如,交换第一个和最后一个,然后是第二个,倒数第二个,等等。然后让它自己调用index + 1
。
所有递归从根本上都必须具有“停止”条件:函数不再调用自身的点。在您的情况下,那将是index >= length_of_array / 2
。
请注意,我还没有发布代码。编写代码是为了完成课程的分配;这是学习的重要部分。
答案 4 :(得分:0)
时间复杂度为O(n),空间复杂度为O(1)
def revStr(a,b,str):
if(a-b>len(str)):
return str
else:
str[a],str[b]=str[b],str[a] #Pythons way of replacing characters
return revStr(a+1,b-1,str)