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
- 指数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),与之前一样,但我们已经定义了索引的最大值为放置良好的长度
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
案例。。。?