一个简单的OCaml程序

4
我想学习一些OCaml,只是为了尝试一下除了C++和Java之外的编程语言。如果您能帮我完成以下程序,我将非常感激:基本上用户输入一个正整数,打印从N到0的所有整数的总和。

显然,您需要创建一个整数N,让用户输入其值。创建一个类型为int的变量sum。使用for循环将N加到sum中,然后将N的值减1。当N大于1时,循环将继续运行。但我不知道如何在OCaml的语法中实现这一点。

如果有任何帮助,将不胜感激。

1个回答

9

您描述算法的方式通常适用于C++或Java实现。您可以在OCaml中以相同的方式编写,但惯用的方式是使用不会改变变量的递归函数,如下所示:

let rec print_sum acc n =
  if n <= 0
  then Printf.printf "Sum: %d\n" acc
  else print_sum (acc + n) (n - 1)

使用以下命令进行调用:print_sum 0 11 ;;

编写递归函数的步骤:

  1. 首先考虑不需要递归时的基本情况。这能够避免忘记它(在这里是当 n <= 0 时)。
  2. 一般情况:如何使已编写的基本情况更接近?在这里,通过用 n-1 调用函数来实现。

非常感谢您,先生!这就是我需要的答案! - Stanimirovv
这是一个更简洁的解决方案。让我们来看一下代码:let print_sum n = print_int (n*(n+1)/2) - rgrinberg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接