[英]how to call a function and use a global variable in that function
所以我的目標是將下面的尾部遞歸函數分為兩個函數。
let fib (n:int) :int =
let rec loop (i:int) (a:int) (b:int) :int =
if i = n then a
else loop (i+1) (b) (a+b) in
loop 0 0 1;;
我不確定如何在循環函數中使用
n
。
您不能,這就是使嵌套函數定義如此流行的原因:-)您將需要添加第四個參數,並將其傳遞給所有未更改的遞歸調用:
let rec loop i n a b =
if i = n then a
else loop (i+1) (n) (b) (a+b)
let fib n =
loop 0 n 0 1
另外,您可以更改循環結構,以使它不會將i
從0
到n
,而是將一個變量(例如j
)從n
遞減,因此您只需要檢查loop
何時到達0
:
let rec loop j a b =
if j = 0 then a
else loop (j-1) (b) (a+b)
let fib n =
loop n 0 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.