首页 > 解决方案 > 从 int 中删除所有奇数位的递归方法

问题描述

我在编写用于从 int 中删除任何奇数位的递归方法时遇到问题 - 例如:evenDigits(123456)应该 return 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
}

标签: javarecursion

解决方案


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

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

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

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

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

……

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

祝你好运!


推荐阅读