tags:

views:

90

answers:

1

I have been reading alot about functional programming and f#. I have a snippet of code that I cannot understand. I am familiar with recursive programs but this particular code is bugging me

open System

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

fact 6

In this snippet of code there is no where in the code that terminates the recusion. How does this program know when to stop. If I programmed this in c# I would tell the program to stop recursing when the index or iterator is higher then 6.

+8  A: 

The recursion stops when it x is less than 1 because the result of the expression is then 1

if x < 1 then 1

In C# the function would look as follows:

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

Pure functional programming is interesting because there is never a return, all the program does is evaluate. You need to ask yourself 'What does this expression evaluate to?'

linuxuser27
The closest equivalent to F#'s if..else would be C#'s ternary conditional operator, which doesn't execute statements, but evaluates to a single value. For example: `int fact(int n) { return n < 1 ? 1 : n * fact(n - 1); }`
cfern
Thank you ..this really helped. This functional stuff is interesting and strange
Luke101