【问题标题】:Finding the largest sequence of identical digits using recursive function (c++) [closed]使用递归函数(c ++)查找最大的相同数字序列[关闭]
【发布时间】: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++,只需做一堆毫无意义的编码难题。每个人最终都会意识到,这些毫无意义的编码难题是在浪费时间,从中也没有什么可学的。但只有在花了很多时间去做之后。而且没有什么可显示的。

标签: c++ recursion


【解决方案1】:

递归和可变全局变量是一个讨厌的组合。
您可以将参数添加到不同的函数并调用它。

是这样的:

// For std::max.
#include <algorithm>

int maxSequenceHelper(int number, int last, int length, int maximum)
{
    int digit = number % 10;
    if (digit == last)
    {
        length += 1;
        maximum = std::max(length, maximum);
    }
    else
    {
        length = 1;
    }
    return number < 10
        ? maximum
        : maxSequenceHelper(number / 10, digit, length, maximum);
}

int maxSequence(int number)
{
    return maxSequenceHelper(number / 10, number % 10, 1, 1);
}

【讨论】:

  • 我可以添加有助于我的功能的附加功能,但问题是它们也应该是递归的。你能帮我把你的其他函数转换成递归函数吗?或者有没有不添加其他功能的更简单的解决方案?
  • @Danielle 4 arg maxSequence递归的
  • @Caleth我真的是c++的新手,所以我不确定某些部分..“?”是做什么的?和“:”代表? max 又是从哪里来的(max 和 max(length, maximum) 一样)?
  • @Danielle 也许通过稍微重命名递归会变得更清晰。
  • @Danielle ?:conditional operatorstd::max 来自<算法>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-26
  • 1970-01-01
  • 1970-01-01
  • 2011-07-21
  • 1970-01-01
  • 2021-12-07
  • 1970-01-01
相关资源
最近更新 更多