Skip to main content
deleted 57 characters in body
Source Link

One possible solution with lambda:

fibp =
  lambda do
    a = [0, 1]
    lambda do |n|
      if n > 1
        a[n] ||= fibp[n - 2] + fibp[n - 1]
      else
        n
      end
    end
  end \
    .call

p fibp[1000]

Still prone to stack overflow as any recursive method in Ruby.

UPDATE: In fact memoizing is not necessary if all you need is just one result:

fibp =
  lambda do
    lambda do |n|
      if n > 1
        p1, p2 = fibp[n - 1]
        [p2, p1 + p2]
      else
        [0, n]
      end
    end
  end \
    .call

p fibp[1000].last

One possible solution with lambda:

fibp =
  lambda do
    a = [0, 1]
    lambda do |n|
      if n > 1
        a[n] ||= fibp[n - 2] + fibp[n - 1]
      else
        n
      end
    end
  end \
    .call

p fibp[1000]

Still prone to stack overflow as any recursive method in Ruby.

UPDATE: In fact memoizing is not necessary if all you need is just one result:

fibp =
  lambda do
    lambda do |n|
      if n > 1
        p1, p2 = fibp[n - 1]
        [p2, p1 + p2]
      else
        [0, n]
      end
    end
  end \
    .call

p fibp[1000].last

One possible solution with lambda:

fibp =
  lambda do
    a = [0, 1]
    lambda do |n|
      if n > 1
        a[n] ||= fibp[n - 2] + fibp[n - 1]
      else
        n
      end
    end
  end \
    .call

p fibp[1000]

Still prone to stack overflow as any recursive method in Ruby.

UPDATE: In fact memoizing is not necessary if all you need is just one result:

fibp =
  lambda do |n|
    if n > 1
      p1, p2 = fibp[n - 1]
      [p2, p1 + p2]
    else
      [0, n]
    end
  end
    
p fibp[1000].last
added 342 characters in body
Source Link

One possible solution with lambda:

fibp =
  lambda do
    a = [0, 1]
    lambda do |n|
      if n > 1
        a[n] ||= fibp[n - 2] + fibp[n - 1]
      else
        n
      end
    end
  end \
    .call

p fibp[1000]

Still prone to stack overflow as any recursive method in Ruby.

UPDATE: In fact memoizing is not necessary if all you need is just one result:

fibp =
  lambda do
    lambda do |n|
      if n > 1
        p1, p2 = fibp[n - 1]
        [p2, p1 + p2]
      else
        [0, n]
      end
    end
  end \
    .call

p fibp[1000].last

One possible solution with lambda:

fibp =
  lambda do
    a = [0, 1]
    lambda do |n|
      if n > 1
        a[n] ||= fibp[n - 2] + fibp[n - 1]
      else
        n
      end
    end
  end \
    .call

p fibp[1000]

Still prone to stack overflow as any recursive method in Ruby.

One possible solution with lambda:

fibp =
  lambda do
    a = [0, 1]
    lambda do |n|
      if n > 1
        a[n] ||= fibp[n - 2] + fibp[n - 1]
      else
        n
      end
    end
  end \
    .call

p fibp[1000]

Still prone to stack overflow as any recursive method in Ruby.

UPDATE: In fact memoizing is not necessary if all you need is just one result:

fibp =
  lambda do
    lambda do |n|
      if n > 1
        p1, p2 = fibp[n - 1]
        [p2, p1 + p2]
      else
        [0, n]
      end
    end
  end \
    .call

p fibp[1000].last
Source Link

One possible solution with lambda:

fibp =
  lambda do
    a = [0, 1]
    lambda do |n|
      if n > 1
        a[n] ||= fibp[n - 2] + fibp[n - 1]
      else
        n
      end
    end
  end \
    .call

p fibp[1000]

Still prone to stack overflow as any recursive method in Ruby.