Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在不改变数组大小的情况下递归迭代数组_Arrays_Algorithm_Recursion_Computer Science - Fatal编程技术网

Arrays 在不改变数组大小的情况下递归迭代数组

Arrays 在不改变数组大小的情况下递归迭代数组,arrays,algorithm,recursion,computer-science,Arrays,Algorithm,Recursion,Computer Science,我目前正试图用Java解决这个问题,但我不想把自己放在一种特定的语言上,因为我认为这是一个“一般”问题 我正在寻找的函数的条件是: 唯一可以修改的值是要迭代的数组中的值。因此,例如,不能使用存储任何类型信息的其他变量,例如索引(顺便说一句,这也消除了在数组中循环的可能性)。这也适用于函数参数。传递给函数的唯一参数是数组本身 除上一点外:内存空间必须一致。因此,无法将当前数组复制到较大/较小的数组上 然而: 该数组是一个整数数组 函数可能返回整数值 数组中的元素可能会发生更改,但只有在对其进

我目前正试图用Java解决这个问题,但我不想把自己放在一种特定的语言上,因为我认为这是一个“一般”问题

我正在寻找的函数的条件是:

  • 唯一可以修改的值是要迭代的数组中的值。因此,例如,不能使用存储任何类型信息的其他变量,例如索引(顺便说一句,这也消除了在数组中循环的可能性)。这也适用于函数参数。传递给函数的唯一参数是数组本身
  • 除上一点外:内存空间必须一致。因此,无法将当前数组复制到较大/较小的数组上
然而:

  • 该数组是一个整数数组
  • 函数可能返回整数值
  • 数组中的元素可能会发生更改,但只有在对其进行迭代之后才会更改
  • 数组不必以任何形式的顺序进行迭代,但每个元素必须“到达”一次
  • 存在一个返回数组长度的函数
签名可能是这样的(同样,没有特定的语言,但因为我目前使用Java,所以签名是Java语法):

int迭代(int[]整数数组)
可以编写这样的函数吗?


我的一次尝试是将数组从索引
0
遍历到
length(array)-1
,将当前索引存储在
array[0]
,如果
array[0]
(或
array[prev]
)是
length(array)-1
,则退出。因此,为了获得下一个数组元素,我将执行类似于
array[array[0]]
的操作,并增加
array[0]
中的计数器。这方面的主要问题是,为了使用
0
初始化
数组[0]
,我必须以某种方式捕获对
iterate()
的第一个函数调用,这不是一个变量,而是一个参数(我们唯一可以使用的东西,否则我看不出它是如何工作的),下面是一个查找max的示例:

函数findMax(arr,index=0,max=Number.MIN\u值){
if(索引max?arr[index]:max)
返回最大值
}

log(findMax([7,9,2,8,6])
这是哪种语言?在这种情况下,我认为查看函数签名时,
static
变量非常方便。是否有任何操作以任何方式拆分数组?如果是,很简单,如果不是,我看不出如何做到这一点。根据您使用的语言,您可以使用数组尾部递归调用该方法,并按递归深度计算元素。所以我的答案是肯定的,这是可能的,“你不能使用其他变量”。第一条注释“静态变量”。。。获得两张赞成票/@MrSmith42尾部将是一个切片,这构成了“复制到一个较短的数组”,这是明确禁止的。