具有两个结果的递归

时间:2017-10-26 16:35:56

标签: recursion f#

我已经构建了一个递归计算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的结果?可能吗?这是一个毫无意义的问题吗?

1 个答案:

答案 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值的情况。