Ad
  • Custom User Avatar

    Well, the two possible values are -1 and 11:

    -1 - (-1) = 0   =  0 * 12
    -1 - (11) = -12 = -1 * 12
    

    In ruby, the result always have the same sign as the second operand (12 in this case) so it must be 11.

    The resulting sign when doing modulus between negative numbers varies between different programming languages. There is a table in the right margin here that shows the chaos: http://en.wikipedia.org/wiki/Modulo_operation#Remainder_calculation_for_the_modulo_operation.

  • Custom User Avatar

    This is an example of recursion. The concept is present in many programming languages, and mathematics in general.

    The equation for a single fibonacci number is dependent on the two previous fibonacci numbers (for all but n == 1 && n == 2). These are determined by either:

    • Calling the fibonacci method again from within the fibonacci method itself (which may in turn call itself many more times, until it hits a seed value).
    • Hitting an n value that acts as a seed. These seed values are required to prevent infinite recursion, and are implemented as the following lines in this solution:
    return 0 if n == 1
    return 1 if n == 2
    

    For a ruby specific explanation of recursion, check out this StackOverflow Post.

    For a more broad, mathematical explanation (including fibonacci numbers) see the wiki article on Recurrence relations.