这是我的面向对象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方法打印出所有数组元素?
让我们定义递归函数:我将使用两个参数: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);
}
请参阅文档中的重载方法部分。
递归函数需要
停止条件—在这种情况下,如果当前元素等于数组长度。由于数组没有与其长度相等的索引,因此在这种情况下我们不执行任何操作:
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