首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何递归求解程序

如何递归求解程序
EN

Stack Overflow用户
提问于 2017-05-09 03:05:18
回答 1查看 105关注 0票数 0

我需要帮助的程序,满足以下报价:

所有整数>= 2只能被分解为素数的乘积。例如,数字12的素数因式分解为2*2*3,而数字100的素数分解为2*2*5*5。我们想知道输入整数是否有一个只有2s和3s的素数因式分解。

我想我需要更多的基本条件和一个捕获所有递归调用。

现行(未完成)守则:

代码语言:javascript
复制
    public static boolean hasFactors2and3(int number) throws IllegalArgumentException{
        if (number < 2) throw new IllegalArgumentException("Number is less than 2");
        if (number >= 2 && number < 5) return true; // because for all these numbers it works
        if (number % 2 == 0) return hasFactors2and3(number /= 2);
        if (number % 3 == 0) return hasFactors2and3(number /= 3);

    }

任何帮助都是非常感谢的!

EN

回答 1

Stack Overflow用户

发布于 2017-05-09 13:51:38

您需要一个递归的解决方案。我不会给你这个的。相反,我将在伪代码中给出一个非递归的解决方案,并由您将其转换为递归解决方案。

代码语言:javascript
复制
function hasFactors2and3(number)

  // Deal with negatives, 0, 1.
  if (number < 2)
    return false
  endif

  // Remove factors of 2.
  while (number MOD 2 == 0)
    number <- number / 2
  endwhile

  // Remove factors of 3.
  while (number MOD 3 == 0)
    number <- number / 3
  endwhile

  // See what factors are left after removing all 2s and 3s.
  return number == 1

end function

提示:研究如何使用循环删除尾递归,然后逆转过程。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43860380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档