在ocaml中使用权力

时间:2016-09-21 02:50:46

标签: functional-programming ocaml

我正在尝试编写一个递归函数,如果第二个数字是第一个数字的幂,它将返回true。 例如: find_power 3 9将返回true find_power 2 9将返回false,因为2的幂是8而不是9

这是我尝试的但我需要一个递归的解决方案

let rec find_power first second = 
if (second mod first = 0)
return true
else
false ;;

1 个答案:

答案 0 :(得分:3)

递归函数具有以下粗略形式

let rec myfun a b =
    if answer is obvious then
       obvious_answer
    else
        let (a', b') = smaller_example_of_same_problem a b in
        myfun a' b'

在你的情况下,我会说如果第二个数字不是第一个的多个或者它是1,那么答案是显而易见的。这基本上就是你现在所做的所有代码,它正在测试显而易见的部分。 (除非你没有处理第0次幂,即1。)

因此,您需要弄清楚如何制作相同问题的较小示例。你知道(假设)第二个数字第一个数字的倍数。而且,您知道x * aa的强大力量,当且仅当xa的力量时。由于x小于x * a,因此这是同一问题的较小示例。

这种方法在某些边缘情况下效果不佳,例如第一个数字为1时(因为x不小于x * 1)。您可以单独处理它们。