F # Завершение рекурсии - PullRequest
       6

F # Завершение рекурсии

2 голосов
/ 04 сентября 2010

Я много читал о функциональном программировании и f #.У меня есть фрагмент кода, который я не могу понять.Я знаком с рекурсивными программами, но этот конкретный код вызывает у меня

open System

let rec fact x =
    if x < 1 then 1
    else x * fact (x - 1)

fact 6

В этом фрагменте кода нет места в коде, который завершает повторение.Как эта программа знает, когда остановиться.Если бы я запрограммировал это на c #, я бы сказал программе прекратить рекурсию, когда индекс или итератор выше 6.

1 Ответ

10 голосов
/ 04 сентября 2010

Рекурсия останавливается, когда x меньше 1, потому что результат выражения равен 1

if x < 1 then 1

В C # функция будет выглядеть следующим образом:

public int fact(int x)
{
   if (x < 1)
      return 1;
   else
      return x * fact(x - 1);
}

Чистое функциональное программирование интересно, потому что возврата никогда не бывает, все, что делает программа, это оценивает. Вы должны спросить себя: «Что оценивает это выражение?»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...