【问题标题】:Recursive method to remove all odd digits from an int从 int 中删除所有奇数位的递归方法
【发布时间】:2020-06-26 21:03:34
【问题描述】:

我在编写用于从 int 中删除任何奇数位的递归方法时遇到问题 - 例如:evenDigits(123456) 应该返回 246。我的第一个想法是将 int 转换为字符串并以这种方式循环,但问题明确指出您不能使用字符串来解决它。

感谢任何帮助

编辑:这是我到目前为止所拥有的,我不确定它是否沿着正确的路线,但我不知道如果最后一个数字是偶数该怎么办

public static int evenDigits(int n)

if(n==2)
{
    return 2;
}

if(n==1)
{
    return 0;
}

if((n%10)%2==1) //if the last digit is odd
{
    return evenDigits(n/10); //run it again without the last digit
}

【问题讨论】:

  • 提示:123456 % 10 是 6,123456 / 10 是 12345。
  • 我想我掌握了这部分问题,但我无法理解如何递归地进行操作
  • 确定为什么可以使用递归,然后定义基本条件以通过返回什么值来退出递归??
  • 找出一个函数,它将你的 int 作为输入,做一些简单的有意义的事情,然后需要再次做同样的事情,所以它用不同的输入调用自己,最后它返回结果
  • 解决此问题的一种方法是从较小的测试用例开始,例如“12”或“23”,然后尝试手动完成。仔细记录您采取的步骤,然后尝试在算法中重现这些步骤。调试几次以确保程序尽可能地遵循您采取的步骤。这通常会让你至少离得足够近,人们会帮助你找出最后的部分来让它工作。但你确实需要努力。

标签: java recursion


【解决方案1】:

由于显然是作业,我无法提供完整的解决方案,但这里有一些提示:

当您定义递归时,您应该考虑何时停止(停止条件)。 如果您遵循@marksplace 提供的提示 - 那么当递归到达没有数字的点时您可能会停止。

您应该考虑的另一件事是将“迄今为止累积”的结果存储在何处。您将通过递归传递它。它甚至在文献中被称为“累加器”。 因此,当您达到停止条件时,您将返回累加器。另外想想你将如何准确地更新累加器。

下面是一个示例,说明它如何在不深入代码的情况下工作:

  1. 123456 一种。最后一位是6,它的偶数,保留它,更新一个累加器(=6) 湾。递归调用 12345
  2. 12345 - 最后一位是奇数 - 删除它, 湾。递归调用 1234
  3. 1234 - 最后一位是 4 - 它的偶数,保留它,更新累加器 6 -> 46(这里你应该考虑一下这种更新的数学公式)

....

最后 - 当你到达没有数字的点时停止,累加器将包含答案

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 2020-05-14
    • 2021-10-06
    • 2017-08-22
    相关资源
    最近更新 更多