我已经构建了一个递归计算2的渐进幂的函数,直到某个值n
。
let rec aux_pow =
fun e n ->
match n with
| n -> 1 # I tried with e, but clearly it modifies the result
| _ -> 2 * aux_pow (e + 1) n
该函数将返回一个整数(2,4,8,16 ... n),可以被其他函数用作参数等。简单。我正在寻找的是一种方法,也可以返回e
的值,即权力的等级。它真的可能吗?我知道每个函数只能返回一个值。获取递归的结果的最佳方法是什么,在这种情况下,递归周期的数字是什么?
即。对于aux_pow 0 8
,如何使e
的值等于3
并同时使函数返回2 * 2 * 2 = 8
的结果?可能吗?这是一个毫无意义的问题吗?
答案 0 :(得分:3)
从函数返回2个值的最简单方法是使用tuples。我对你提供的示例代码采取了一些自由,并提出了一个应该做你正在寻找的版本。
let aux_pow limit =
let rec aux_pow' value counter =
match value with
| n when n = limit -> (limit, counter)
| n when n > limit -> (int (2. ** double (counter - 1)), counter - 1)
| _ -> aux_pow' (2 * value) (counter + 1)
aux_pow' 1 0
它定义了一个内部递归函数,用于计算运行的次数。输出是一个带有值和计数的元组。
它还包含为限制指定非幂2值的情况。