2016-08-12 5 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 

Вы объявляли переменную result внутри while сферы и вернуть его за его пределами. Ваш код, однако, неправильно, я взял на себя смелость изменить его, вот что я сделал:

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