F#递归函数在加号和减号之间交替
F# recursive function alternating between plus and minus
我被要求删除下面 F# 函数中的一个子句,同时保持其功能,即正负交替。
let rec altsum =
function
| [] -> 0
| [ x ] -> x
| x0 :: x1 :: xr -> x0 - x1 + altsum xr
我偶然发现了下面的解决方案,但我不太明白它是如何计算出正确结果的,因为它只包含一个减号而不包含一个加号。有人可以解释下面的函数 altsum1
是如何计算的吗?
let rec altsum1 =
function
| [] -> 0
| x0 :: xr -> x0 - altsum1 xr
之所以有效,是因为 -1 * -1 = 1
。然后我们可以使用分配式 属性 来证明:
a - (b - c) = a - b + c
所以:
altsum([1; 2; 3; 4]) =
1 - altsum([2; 3; 4]) =
1 - (2 - altsum([3; 4])) =
1 - (2 - (3 - altsum[4])) =
1 - (2 - (3 - 4)) =
1 - 2 + 3 - 4 =
-2
我被要求删除下面 F# 函数中的一个子句,同时保持其功能,即正负交替。
let rec altsum =
function
| [] -> 0
| [ x ] -> x
| x0 :: x1 :: xr -> x0 - x1 + altsum xr
我偶然发现了下面的解决方案,但我不太明白它是如何计算出正确结果的,因为它只包含一个减号而不包含一个加号。有人可以解释下面的函数 altsum1
是如何计算的吗?
let rec altsum1 =
function
| [] -> 0
| x0 :: xr -> x0 - altsum1 xr
之所以有效,是因为 -1 * -1 = 1
。然后我们可以使用分配式 属性 来证明:
a - (b - c) = a - b + c
所以:
altsum([1; 2; 3; 4]) =
1 - altsum([2; 3; 4]) =
1 - (2 - altsum([3; 4])) =
1 - (2 - (3 - altsum[4])) =
1 - (2 - (3 - 4)) =
1 - 2 + 3 - 4 =
-2