2016-08-12 107 views
0

我一直在試圖編寫一個程序,打印出一個階乘,但實際上沒有使用遞歸。問題的階乘函數

下面是代碼

let factorial x = 
    let mutable n = x 
     while n > 0 do 
      let result = n*(n-1) 
      n <- (n-1) 
     result 

的問題是,當我嘗試運行它告訴我,該預期的結果是一個單位的代碼,而輸入顯然是一個整數,這顯然導致一個錯誤。不過,我已經檢查了我的所有變量和編譯器會將它們解釋爲整數,所以有什麼問題

+0

由於是代碼甚至不爲我編(的同時,「塊」縮進太多) – Sehnsucht

+0

你的樣品沒有編譯 – Petr

+0

你有問題的答案嗎? –

回答

3

沒有與您的代碼在這裏的幾個問題,你必須牢記壓痕 F#中是非常重要的,因爲你想要做你的代碼應該是:

let factorial x = 
    let mutable n = x 
    let mutable result = 1 
    while n > 0 do 
     result <- n * (n-1) 
     n <- (n - 1) 
    result 

你被宣佈while範圍內result變量並返回它外面。但是你的代碼是不正確的,我花了修改,在這裏我就是這樣做的自由:

let factorial x = 
    let mutable n = x 
    let mutable result = 1 
    while n >= 1 do 
     result <- result * n 
     n <- (n - 1) 
    result 
+0

沒有減少n這是一個很好的無限循環;) – Sehnsucht

+0

即使減少n結果只使用最後兩個數字;這不是一個因子。 – Vandroiy

+0

哎呀,現在編輯它,對不起,一定錯過了,謝謝@Sehnsucht – Luiso