使用递归方法反转并打印数组
Posted
技术标签:
【中文标题】使用递归方法反转并打印数组【英文标题】:reverse and print an array using recursive method 【发布时间】:2015-10-19 16:36:38 【问题描述】:下面的方法工作正常,但我找不到使用相同方法打印反转数组的方法。我尝试了 for-each 循环,但它打印了三个数组而不仅仅是一个。 例如,如果输入:
尺寸 5,开始=1,结束=5,arr[] =1,2,3,4,5
输出:
543215432154321
正确的输出应该是
54321
代码如下:
static void reverse(int[] arr, int start, int end)
if (start < end)
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
reverse(arr, start + 1, end - 1);
for (int pr : arr)
System.out.print(pr);
【问题讨论】:
您的初始呼叫不应该是start = 0
和end = 4
,因为数组索引从零开始?而且您的函数在每次调用时都会打印整个数组,因此您会多次输出它。
返回数组作为结果,然后在调用方法中打印for循环中的内容
因为它执行了 n 次并打印了数组 n 次。
我现在想通了,谢谢。
如果现在一切都对你有用,你应该接受一个答案。
【参考方案1】:
你们很亲密。
您犯的唯一错误是从 reverse
方法内部打印结果 - 不要忘记它是递归的,因此您会打印中间结果。
相反,首先从另一个方法调用,然后将其打印出来:
public static void main(String[] args)
int[] arr = 1,2,3,4,5,6,7,8,9,0;
reverse(arr,0,arr.length-1);
for (int pr : arr)
System.out.print(pr);
static void reverse(int[] arr, int start, int end)
if (start < end)
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
reverse(arr, start + 1, end - 1);
【讨论】:
您更正但未提及的 OP 的第二个错误是将数组最初从 0 索引到 length-1 而不是 1 到 length。 :)【参考方案2】:每次调用 'reverse' 方法时,您都会打印出数组。我修改了一些你的代码。它工作正常。
static void reverse(int[] arr, int start, int end)
if (start < end)
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
reverse(arr, start + 1, end - 1);
else
for (int pr : arr)
System.out.print(pr);
由于你的数组大小是 5,你应该做这样的事情
reverse (myArray,0,4);
【讨论】:
【参考方案3】:public static void main(String[] args)
//assume u have create an array;
System.out.print("this array reversely equal to : ");
ArrayReverse(array, 0);
public static void ArrayReverse(int[] a, int index)
if (index > a.length - 1)
return;
ArrayReverse(a, index + 1);
System.out.print(a[index] + " ");
【讨论】:
以上是关于使用递归方法反转并打印数组的主要内容,如果未能解决你的问题,请参考以下文章