【发布时间】:2017-08-09 07:09:26
【问题描述】:
所以我正在编写一个 haskell 程序来计算除以阶乘的数字的最大幂。
largestPower :: Int -> Int -> Int
这里largestPower a b 找到了b 除以a! 的最大幂。
现在我明白了它背后的数学原理,找到答案的方法是将a(只是一个)除以b,忽略余数,最后将所有商相加。所以如果我们有类似的东西
largestPower 10 2
我们应该得到 8,因为 10/2=5/2=2/2=1,我们加上 5+2+1=8
但是,我无法弄清楚如何将它作为一个函数来实现,我是使用数组还是只是一个简单的递归函数。
我倾向于它只是一个普通函数,尽管我猜它可以通过将商存储在数组中并添加它们来完成。
【问题讨论】:
-
是的,一个简单的递归函数就可以了。虽然你也可以根据需要使用列表。
-
@Bergi 你能给我一些关于这个功能的提示吗,我无法弄清楚。
-
如果我没看错,不需要递归,一个简单的循环就足够了:(伪代码):divide = a;功率=0; while (dividend >= b) { 股息=round(dividend/b);power+=1;}
-
递归是实现这一点的惯用方式。尝试更正式地写出你对数学的理解。
-
您不必添加
5+2+1。你简单算一下有三个分区,然后计算2^3 = 8。这个总和有效的事实只是巧合。
标签: algorithm haskell recursion functional-programming