使用递归方法反转并打印数组

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 = 0end = 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] + " ");


【讨论】:

以上是关于使用递归方法反转并打印数组的主要内容,如果未能解决你的问题,请参考以下文章

剑指 Offer 24. 反转链表(双指针+递归)

剑指 Offer 24. 反转链表(双指针+递归)

剑指 Offer 24. 反转链表(双指针+递归)

如何使用递归反转字符串?

php实现数组反转

在Java中递归反转字符串的最佳方法是啥?