gpt4 book ai didi

recursion - 将递归函数从 3 个子句简化为 2 个子句

转载 作者:行者123 更新时间:2023-12-05 09:21:41 25 4
gpt4 key购买 nike

我正在 F# 上做一些练习,我有这个计算交替总和的函数:

let rec altsum = function
| [] -> 0
| [x] -> x
| x0::x1::xs -> x0 - x1 + altsum xs;;

val altsum : int list -> int

练习包括只用两个子句声明相同的函数...但是如何做到这一点?

最佳答案

mydogisbox 的答案正确且有效!

但经过一些尝试后,我找到了一个最小且可读的问题解决方案。

let rec altsum2 = function
| [] -> 0
| x0::xs -> x0 - altsum2 xs

例子

altsum2 [1;2;3] essentially do this:
1 - (2 - (3 - 0)

这有点棘手,但可以!


题外话:

另一种解决问题的优雅方法是使用 F# List 库:

let altsum3 list = List.foldBack (fun x acc -> x - acc) list 0;;

在 phoog 的评论之后我开始尝试用尾递归函数解决问题:

let tail_altsum4 list = 
let pl l = List.length l % 2 = 0
let rec rt = function
| ([],acc) -> if pl list then -acc else acc
| (x0::xs,acc) -> rt (xs, x0 - acc)
rt (list,0)

这也有点棘手……减法不是可交换的,并且不可能考虑用 List.rev 反转一个长列表……但我找到了一个解决方法! :)

关于recursion - 将递归函数从 3 个子句简化为 2 个子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30647694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com