gpt4 book ai didi

recursion - 计算 Ocaml 中的递归调用次数

转载 作者:行者123 更新时间:2023-12-02 00:26:08 25 4
gpt4 key购买 nike

我是 Ocaml 的新手。我遇到的问题是跟踪函数中递归调用的次数。

比如我写了一个函数:

    let rec someFunction n = 
let digi = someOtherFunction n in
match digi with
| x when x > 123 -> someFunction digi
| x -> [want to output # of recursive calls] ;;

我该怎么做呢?我尝试创建一个变量,但如果我在 someFunction 中有它,它只会一直重置为它的初始值。我基本上想做的是这样的:

     while ( x > 123) {
count++;
someFunction(x);
}

return count;

如果这是非常微不足道的事情,请原谅我。

最佳答案

首先,我有点不明白你想用计数器做什么,你不想让它数到 123 吗?这是否意味着您需要:

while (count < 123) { count++; someFunction(count); }

...意思是你计算它被调用的次数,直到它达到 123 然后退出。

如果你想记录函数被调用了多少次直到某个限制,那么你可以使用这样的引用:

let someFunction n =
let count = ref 0 in
let rec aux () =
if !count >= n then count
else (
incr count;
(* do the stuff you wanted to do in someFunction here *)
aux () ) in
aux () ;;

如果你想避免可变状态(通常是个好主意)那么你可以在没有 ref 的情况下这样做:

let someFunction n  =
let rec aux count =
if count >= n then count
else aux (count+1) in
aux 0 ;;

也许这就是您想要做的?

let someOtherFunction n = 
Printf.printf "n is: %d\n" n;;

let someFunction n f =
let rec aux count =
if count >= n then count
else (
f count;
aux (count+1)
) in
aux 0 ;;

# someFunction 10 someOtherFunction ;;
n is: 0
n is: 1
n is: 2
n is: 3
n is: 4
n is: 5
n is: 6
n is: 7
n is: 8
n is: 9
- : int = 10

另一方面,如果您想跟踪调用 someFunction 的次数,那么您需要在与 someFunction 定义相同的范围级别使用该 ref 计数器,例如:

let count = ref 0 ;;
let rec someFunction n f =
if !count >= 123 then count
else (
incr count;
f n;
someFunction n f
) ;;

关于recursion - 计算 Ocaml 中的递归调用次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8874896/

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