我正在尝试编写一个递归函数,如果第二个数字是第一个数字的幂,它将返回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 ;;
答案 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 * a
是a
的强大力量,当且仅当x
是a
的力量时。由于x
小于x * a
,因此这是同一问题的较小示例。
这种方法在某些边缘情况下效果不佳,例如第一个数字为1时(因为x
不小于x * 1
)。您可以单独处理它们。