[英]How do I write a loop function as a recursive function?
好吧,我已经尝试了很多次。 但是,有一点我认为longestSequence函数会有所帮助,因为它显示了最长的冰雹序列。 虽然,我似乎无法弄清楚如何查找或存储用于查找的值,如果有人可以解释如何做,我将不胜感激。
int longestSequence(int n)
{
int u = n;
if(u == 1)
{
return 1;
}
else
{
return max(hailstoneLength(u), longestSequence(u-1));
}
}
我遇到问题的部分是我最长的启动顺序:
int hailLongestSeq(int n)
{
int k;
int longest = 0;
for(int j = 1; j <= n; j++)
{
if(hailstoneLength(j) > longest)
{
longest = hailstoneLength(j);
k = j;
}
}
return k;
}
我不确定如何使它递归,我注意到有些递归我仍然看到人们使用for循环,但是我确定我们不应该使用循环。 这可能是一个愚蠢的问题,但是如果有人知道,是否有公式可以将for循环转换为递归?
预期的输出是这样的:
以10开头的最长冰雹序列的长度为20。以10开头的最长冰雹序列的长度为9。
因为9的序列长度为20个数字,并且从1到10最长。
是的,每个for循环都可以转换为递归调用,显然是这样的:
for (i=0; i<N; i++) {
body;
}
转换为:
func(int i) {
if (i<N) { body; func(i+1) }
else return;
}
func(0);
这可以很容易地扩展到任何循环计算中(如果需要,可以添加参数,返回值等)。
您可以将要保留其值的局部变量添加到函数的参数签名中。 我试图将代码重写为递归代码。 检查并确认是否可以解决您的问题。
int hailLongestSeq(int n, int j, int k, int longest)
{
if(j <= n)
{
if(hailstoneLength(j) > longest)
{
longest = hailstoneLength(j);
k = j;
}
k = hailLongestSeq(n, ++j, k, longest);
}
return k;
}
这可能需要修复,但是逻辑保持不变,将变量作为参数传递以保留值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.