我完成了以下练习,但我不喜欢该解决方案:
使用递归编写函数isPerfectSquare,以判断是否
整数是一个完美的平方
isPerfectSquare 1->应该返回True
isPerfectSquare 3->应该返回Falsenum+1
部分是isPerfectSquare 0 and isPerfectSquare 1
的情况,这是我不喜欢的部分之一,这是我的解决方案:
perfectSquare 0 1 = [0] ++ perfectSquare 1 3
perfectSquare current diff = [current] ++ perfectSquare (current + diff) (diff + 2)
isPerfectSquare num = any (==num) (take (num+1) (perfectSquare 0 1))
有什么更优雅的解决方案?当然,我们不能使用sqrt,也不能使用浮点运算。
最佳答案
@luqui你的意思是这样吗?
pow n = n*n
perfectSquare pRoot pSquare | pow(pRoot) == pSquare = True
| pow(pRoot)>pSquare = perfectSquare (pRoot-1) pSquare
| otherwise = False
--
isPerfectSquare number = perfectSquare number number
我不敢相信我没有看到它xD非常感谢!我一定很累