【发布时间】:2023-01-10 21:02:49
【问题描述】:
我需要使用递归函数在给定整数中找到最大的相同数字序列。 例如:
input: "2221", output: 3
input: "2223333", output: 4
input: "222333", output: 3
由于某种原因,代码有时可以正常工作,有时却不能。当我输入“1112”时,它会给出正确的输出 (3),但是当我输入“1111555”时,我希望得到输出 4,但得到的却是 6。 此外,我无法更改函数接收的参数,所以如果有人知道如何将参数插入函数内部而不是外部(如果我将它们插入函数内部,那么我收到的输出始终为 0) 我真的很感激你的帮助,所以提前谢谢你:)
我的代码:
int currentLength = 0, maxLength = 0;
int currentDigit = -1;
int maxSequence(int num)
{
if (num <= 0)
return maxLength;
int digit = num % 10;
if (digit == currentDigit) {
maxLength= 1 + maxSequence(num / 10);
}
else {
currentDigit = digit;
if (maxLength > 1)
{
maxLength = 0;
}
else
{
maxLength = 1;
}
return maxSequence(num / 10);
}
}
【问题讨论】:
-
您是否尝试过使用调试器单步调试代码,看看为什么它没有按照您的预期运行?
-
尝试在没有全局变量的情况下进行。将递归与外部状态混合会导致非常混乱的逻辑。
-
使用辅助函数来跟踪状态。
-
另外请打开编译器警告...发布的函数有时会在不返回任何未定义行为的情况下完成。
-
这个问题的代码/措辞表明它来自无数编码挑战/谜题诈骗网站之一。他们通过提供神秘的编码难题来利用想要学习 C++ 的人,并承诺您不需要通过一本好的教科书来学习和学习 C++,只需做一堆毫无意义的编码难题。每个人最终都会意识到,这些毫无意义的编码难题是在浪费时间,从中也没有什么可学的。但只有在花了很多时间去做之后。而且没有什么可显示的。