我是ruby的新手并且正在处理一个问题,但我不知道如何解决这个问题。 我想编写一个函数,如果每个连续元素是前一个元素的幂,则返回true,否则返回false
例如:如果我有一个列表[2; 4; 8; 16],该函数应该返回true 函数应该返回false,[3; 7; 9;]
let consec_ele element = match element with
[] -> true
h::t ->
if h > t then false
else
if t/h = 0 && t mod h = 0 then true
;;
我只是无法弄清楚如何使其工作,并如此递归。
答案 0 :(得分:2)
嗯,首先需要将问题正式化:
^
^
开头
true
,那么我需要重新开始,因为n
n = 1
然后我在列表的其余部分a^0 = 1 for all a
上调用一个新函数n > 0
,其行为如下:
check
为空,则为真tl
以tl
开头,如果是tl
,那么我会以其他方式递归n'
,我需要保留我现在正在检查的事实{ {1}} ... n' = n * n
则check
在OCaml中,这将是
n * n * n
(对于n <= 0
函数,我让你写它;-)当然,这可能是坏的,因为你可能有溢出,也许你更愿意看看是否false
( let consec_ele l =
let rec cer b = function
| [] -> true
| n :: tl ->
if n <= 0 then false
(* We can start again for the first 1 we see, but if our
* list is [1; 1; 1; ...; 1] then we need to stop
* That's why we have this boolean b which is true and once
* we see 1 as the head of our list we swap it to false
*)
else if n = 1 then b && cer false tl
else
let rec check p = function
| [] -> true
| n' :: tl -> n' = pow n p && check (p + 1) tl
in check 1 tl
in cer true l;;
的pth根(为什么我们在stackoverflow上没有LaTeX数学模式?: - ())