list - 列表的最小值
问题描述
我想为我的最小值创建一个非递归函数,但我遇到了一些麻烦,你能帮帮我吗?
`let min_list lst=
let n=list.length lst ;;
let a=list.nth lst ;;
for i = 1 to n-1 ;;
let b=list.nth lst i;;
if a >b then a=b lst done ;;`
老实说,非递归函数很难。所以这只是为了学习。我在第 6 行仍然有错误
let min_list lst=
let a=List.hd lst in
let n=List.length lst in
for j =1 to n-1 do
let b=List.nth lst j in
if a > b then (let a=b) done ;;
谢谢它很有用它对我帮助很大。我还有另一个问题这之间有什么区别
let min_array a =
let min =ref (List.hd a) in
for i = 1 to List.length a -1 do
if List.nth a i < !min then min := List.nth a i
done;
!min;;
print_int (min_array [ 10 ; 5 ; 7 ; 8 ; 12 ]);;
和
let min_array a =
let min =ref (List.hd a) in
for i = 1 to List.length a -1 do
if ref (List.nth a i) < min then min := List.nth a i
done;
!min;;
print_int (min_array [ 10 ; 5 ; 7 ; 8 ; 12 ]);;
一样吗?我想
解决方案
为什么不想使用递归函数?Liste 通过递归函数进行交叉。每次使用List.nth l n
Ocaml 时都必须跨越 n 个值,直到找到第 n 个元素。在 Ocaml 中,您不能像在其他语言中那样更改变量值。你想a
成为一个ref
。此外,您的函数不会返回任何您必须!a
在 thedone
和;;
. 会有一个!
因为a
将是一个参考。但是如果你想练习使用数组,因为你在这里所做的复杂度是 O(n²) 而不是 O(n)。
推荐阅读
- go - 为什么我的删除对使用 golang gorm 的相关表不起作用?
- office-js - 是否可以使用 Officejs 处理消息读取时的消息正文
- python - 如何通过 python 和 IMAP 删除超过 2 天的电子邮件?
- elasticsearch - Elasticsearch 未分配的分片 CircuitBreakingException[[parent] 数据太大
- sql - Oracle SQL Developer 限制数据类型 char(5) 的字符数
- bash - 从第二个 CSV 文件中删除 CSV 中的条目
- linux - Docker 层不存在
- bash - Visual Studio Code - “Bash Debug”扩展安装失败
- javascript - 在加载时添加 em 标签以突出显示,但文本未突出显示
- python - 循环中的循环如何与python一起工作