Recursion 最长索引递归

Recursion 最长索引递归,recursion,Recursion,我需要为此作业编写一个代码,学习的主题是递归方法: 例子:考虑ARR= {0,51,1,1,2}。指数0、2和3处于良好位置: 由于P0=0,指数0处于良好位置 由于P1=5>1,索引1的位置不好。因为所有元素都是正的,所以不可能找到从索引1开始的序列,该序列可以求和为1 由于P2+P3=2,指数2处于良好位置 由于P3+P4=3,指数3的位置很好 索引4的位置不好:我们找不到一个从索引开始的序列可以求和为4,这是因为P4是数组中的最后一个元素,它只有2 我们将一个放置良好的索引的“放置良好

我需要为此作业编写一个代码,学习的主题是递归方法:

例子:考虑ARR= {0,51,1,1,2}。指数0、2和3处于良好位置:

  • 由于P0=0,指数0处于良好位置
  • 由于P1=5>1,索引1的位置不好。因为所有元素都是正的,所以不可能找到从索引1开始的序列,该序列可以求和为1
  • 由于P2+P3=2,指数2处于良好位置
  • 由于P3+P4=3,指数3的位置很好
  • 索引4的位置不好:我们找不到一个从索引开始的序列可以求和为4,这是因为P4是数组中的最后一个元素,它只有2
我们将一个放置良好的索引的“放置良好的长度”定义为j-i+1–当求和时表明该索引放置良好的序列长度。索引可能包含多个元素序列。在这种情况下,“放置良好的长度”是将索引定义为“放置良好”的各种序列的最大长度

示例:查看前面的示例:

  • 指数0的位置长度为1(i=0,j=0,j-i+1=1)
  • 指数2的放置长度为2(i=2,j=3,j-i+1=2)
  • 指数3的良好放置长度为2(i=3,j=4,j-i+1=2)
  • 对于索引1和4,由于索引未正确放置,因此未定义正确放置的长度
  • 考虑arr={0,5,1,1,2,0}–索引3的正确放置长度现在是3(i=3,j=5,j-i+1=3)。另一个定义索引3的序列是(i=3,j=4,j-i+1=2),与之前一样,但我们已经定义了索引的最大值为放置良好的长度
“最大井位长度”是arr中所有井位指数的井位长度之间的最大值。 如果数组中没有索引正确放置,则认为最大正确放置长度为零

函数应该返回最大的正确放置长度

示例:对于前面的示例,longestIndex的返回值应该是2,因为这是数组中任何放置良好的索引的最大放置良好的长度

限制:不允许更改数组;您不允许使用超过1个可从LongesIndex访问的附加(助手)函数。不允许迭代

这是我写的代码:

int longestIndexHelper(int arr[], int length, int old)
{
    if(length==0)
    return 0;
    if((arr[length]+arr[length-1]==length-1)||
       (arr[0]==0)&&(old!=0)&&(old-length==1))
      return (longestIndexHelper(arr, --length, length)+1);
}

int longestIndex(int arr[], int length)
{
    return longestIndexHelper(arr, length, length);
}
显然,它不起作用:) 有人能帮忙吗

不允许迭代

这是一个完全人为的限制,当它在这种情况下显然是一个较差的解决方案时,它会将我们推入递归。大学教授们什么时候会开始为这些作业寻找真正需要递归解决方案(比如,走树)的东西

我个人会通过编写迭代版本并将其转换为尾部调用递归版本来实现这一点。只是为了满足这个武断的要求。把迭代版本放在那里,因为它被注释掉了

不管怎么说,你的方法不起作用的原因是它只检查长度为2的匹配

编辑:下面是我的递归解决方案的简要概述:

int longestIndex(int arr[], int length) {
    if(length == 0) return 0;
    int thisLongestIndex = longestIndexHelper(
        /*whatever parameters you need in order to call it on the first element
                  in the array*/
        );
    return max(thisLongestIndex, longestIndex(arr+1,length-1));
}

longestIndexHelper将计算出数组中第一个元素的最长匹配。

我不打算调试整个函数,但一个明显的潜在缺陷是,在某些情况下,助手函数不返回任何值


<>你需要考虑递归如何在<代码> if()测试失败时继续。

你所写的代码显然不会编译——你的IF语句没有其他的情况。如果您编辑它以显示您确实尝试过,我或其他人可能会从何时开始,每个
If
块都必须有一个
else
案例。。。?