当前位置: 首页 > 知识库问答 >
问题:

使用递归函数printArray()显示数组的所有元素

夏侯浩气
2023-03-14

这是我的面向对象java编程类的作业:

编写一个名为printArray()的递归函数,该函数显示整数数组中的所有元素,并用空格分隔。数组的大小必须为100个元素,并使用for循环和随机数生成器填充。其伪代码如下:

//Pseudo-code for main
//Instantiate an integer array of size 100
//fill the array
For (int i=0; i<array.length; i++)
Array[i] = random number between 1 and 100 inclusive
printArray(integer array);  //You are not restricted to a single parameter   – use as many as you need

//Pseudo-code for printArray()
//Base Case
If the array is empty return
//Recursive Case
Else print the next value in the array and then call printArray() to print the next value

这就是我遇到麻烦的地方

我可以像我应该的那样打印所有在它们之间有空格的整数,但是我不知道如何调用printArray来打印它,这就是我应该显示数组的方式。

这是我目前的代码:

import java.util.*;

public class ArrayPrinter {

public static void main(String [] args){

int Array[] = new int [100];//initialize array
Random RandomNumber = new Random();

System.out.println("Random int array: ");
for(int i = 0; i<100; i++){//fill the array
   Array[i] = RandomNumber.nextInt(100 - 1)+ 1;
   System.out.print(Array[i] + " ");//this properly prints out 100 random
   //numbers between 1 and 100
}
System.out.println();

System.out.println("All array elements: ");
printArray(Array);//but this does nothing. There are no error notifications,
//it's just nothing happens at all.

}
 
public static void printArray(int [] Array){
if (Array.length > 0) {
  int m = Array.length - 100;

  return;//according to the psuedocode I need a return
}
   else{//and I need to have an if....else

   System.out.print(Array + " ");
   printArray(Array);
}
}
    
}

我的问题:

如何调用printArray方法打印出所有数组元素?

共有1个答案

长孙玉泽
2023-03-14

让我们定义递归函数:我将使用两个参数:arr作为要打印的数组,以及要打印的数组中当前元素的索引:

public static void printArray(int[] arr, int i);

我们可以将此方法设为私有,并为此方法定义公共重载,只接受要打印的数组,并将索引参数定义为0,因为我们要打印整个数组,因此从第一个索引开始:

private static void printArray(int[] arr, int i);

public static void printArray(int[] arr) {
    printArray(arr, 0);
}

请参阅文档中的重载方法部分。

递归函数需要

  1. 停止条件—在这种情况下,如果当前元素等于数组长度。由于数组没有与其长度相等的索引,因此在这种情况下我们不执行任何操作:
private static void printArray(int[] arr, int i) {
    if (i == arr.length) return;
}
private static void printArray(int[] arr, int i) {
    if (i == arr.length) return;
    printArray(arr, i+1);
}

我们还需要一些逻辑来显示当前元素(即显示):

private static void printArray(int[] arr, int i) {
    if (i == arr.length) return;
    System.out.println(arr[i]);
    printArray(arr, i+1);
}

示例代码:

class Solutin {
    private static void printArray(int[] arr, int i) {
        if (i == arr.length) return;
        System.out.println(arr[i]);
        printArray(arr, i+1);
    }

    public static void printArray(int[] arr) {
        printArray(arr, 0);
    }

    public static void main(String[] args) {
        printArray(new int[]{});                 // Empty array, outputs nothing
        printArray(new int[]{1});                // Singleton array, outputs 1
        printArray(new int[]{1, 2});             // Array with 2 elements, outputs 1, 2
        printArray(new int[]{3, 1, 4, 1, 5});    // Array with 3+ elements, outputs 3, 1, 4, 1, 5
    }
}

 类似资料:
  • 我需要使用递归完成以下任务: 声明一个函数insert\u all\u positions(插入所有位置),该函数接受以下参数:一个元素x和一个数组arr。函数必须返回一个数组数组,每个数组对应于arr,其中x插入到可能的位置。也就是说,如果arr是长度N,则结果是具有N 1个数组的数组。 例如,插入所有位置(10、[1,2,3])的结果是数组: 到目前为止,我有这个代码:

  • 问题内容: 我必须用Java编写幂方法。它接收两个整数,无论​​它们是正数还是负数都没有关系。它应该具有的复杂度。它还必须使用递归。我当前的代码有两个数字,但我不断输出的结果是零,我不知道为什么。 问题答案: 让我们从一些数学事实开始: 对于正n,aⁿ=a⨯a⨯…⨯an次 对于负数n,aⁿ=⅟a⁻ⁿ=⅟(a⨯a⨯…⨯a)。这意味着 a 不能为零。 对于n = 0,即使 a 为零或负,aⁿ= 1 。

  • 我试图写一个递归函数来产生一个数组的所有排列。 它作为调用,应该会产生所有的排列,但这并不起作用。我该怎么修好它?

  • 问题 你想在一个函数中调用相同的函数。 解决方案 使用一个命名函数: ping = -> console.log "Pinged" setTimeout ping, 1000 若为未命名函数,则使用 @arguments.callee@: delay = 1000 setTimeout((-> console.log "Pinged" setTimeout arg

  • 在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。 举个例子,我们来计算阶乘n! = 1 x 2 x 3 x ... x n,用函数fact(n)表示,可以看出: fact(n) = n! = 1 x 2 x 3 x ... x (n-1) x n = (n-1)! x n = fact(n-1) x n 所以,fact(n)可以表示为n x fact(n-1),

  • 在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。 举个例子,我们来计算阶乘n! = 1 x 2 x 3 x ... x n,用函数fact(n)表示,可以看出: fact(n)=n!=1\times2\times3\times\cdot\cdot\cdot\times(n-1)\times n=(n-1)!\times n=fact(n-1)\times n