首页 > 解决方案 > 列表的最小值

问题描述

我想为我的最小值创建一个非递归函数,但我遇到了一些麻烦,你能帮帮我吗?

`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 ]);;

一样吗?我想

标签: listfunctionloopsrecursionocaml

解决方案


为什么不想使用递归函数?Liste 通过递归函数进行交叉。每次使用List.nth l nOcaml 时都必须跨越 n 个值,直到找到第 n 个元素。在 Ocaml 中,您不能像在其他语言中那样更改变量值。你想a成为一个ref。此外,您的函数不会返回任何您必须!a在 thedone;;. 会有一个!因为a将是一个参考。但是如果你想练习使用数组,因为你在这里所做的复杂度是 O(n²) 而不是 O(n)。


推荐阅读