Algorithm 计算数组中大于给定整数x的最小元素的程序。(使用递归)

Algorithm 计算数组中大于给定整数x的最小元素的程序。(使用递归),algorithm,recursion,Algorithm,Recursion,我必须为一个包含两个参数的程序编写伪代码;一个数组和一个整数。程序应打印大于整数x的数组的最小元素。我已经写了这个程序,它工作得很好。我现在必须使用递归重新编写代码 我已经编写了使用递归的伪代码,当我进行递归调用时,我将参数传递给数组[currentIndex-1],这样程序就会进行递归调用,最后索引可以降到零,递归可以退出 我想知道递归是否以这种方式工作,或者在这个场景中是否有不同的方法来实现递归 如果我使用seachElementA[currentIndex-1]x递归调用函数,递归调用会成

我必须为一个包含两个参数的程序编写伪代码;一个数组和一个整数。程序应打印大于整数x的数组的最小元素。我已经写了这个程序,它工作得很好。我现在必须使用递归重新编写代码

我已经编写了使用递归的伪代码,当我进行递归调用时,我将参数传递给数组[currentIndex-1],这样程序就会进行递归调用,最后索引可以降到零,递归可以退出

我想知道递归是否以这种方式工作,或者在这个场景中是否有不同的方法来实现递归

如果我使用seachElementA[currentIndex-1]x递归调用函数,递归调用会成功吗?我担心的是,将索引号放入数组会使它指向单个元素,而不是整个数组;如果这是正确的方法

searchElement(int A[], int x) {

n = A.length;
sum = -1;
if (A[0] == x) { sum++; return sum;}
else if (A[0] != x) {return sum;}

currentIndex = n - 1;
if(A[currentIndex] == x) {sum++;}
seachElement(A[currentIndex -1],x);
}

递归是一种函数遗产,因此将其与函数风格结合使用会产生最好的结果。在函数样式中,函数具有引用透明性——它们总是在给定相同输入的情况下生成相同的输出。这意味着我们要避免像突变和变量重新分配这样的事情,因为它们会产生混淆的结果,并且很难进行推理。在这里,我们使用带有附加状态参数的辅助函数来跟踪正在进行的计算

search (int A[], int x)
  search1 (A, x, 0, Infinity)        # 1

search1 (int A[], int x, int i, int min)
  if (i >= A.length)
    min                              # 2
  else if (A[i] > x && A[i] < min)
    search1(A, x, i + 1, A[i])       # 3
  else
    search1(A, x, i + 1, min)        # 4
如果是空数组,则没有最小值可搜索。返回空结果。 否则,使用辅助函数search1将索引i从1(而不是0)开始,并使用第一个元素A[0]作为初始结果。这是一个安全的假设,因为在此代码分支上,已知a至少有一个元素。
search (int A[], int x)
  if (A.length == 0)
    null                           # 1
  else
    search1 (A, x, 1, A[0])        # 2

search1 (int A[], int x, int i, int min)
  if (i >= A.length)
    min
  else if (A[i] > x && A[i] < min)
    search1(A, x, i + 1, A[i])
  else
    search1(A, x, i + 1, min)