簡體   English   中英

如何調用函數並在該函數中使用全局變量

[英]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

另外,您可以更改循環結構,以使它不會將i0n ,而是將一個變量(例如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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM