[#407882] Ruby extremely slow compared to PHP — Mick Jagger <lists@...>

Hello there, how are you? Hope you are fine. I am a PHP programmer

17 messages 2013/06/02

[#407908] TCPServer/Socket and Marshal problem — Panagiotis Atmatzidis <atma@...>

Hello,

18 messages 2013/06/03

[#407946] Is rubyquiz.com dead? — Alphonse 23 <lists@...>

Thread title says everything.

18 messages 2013/06/04

[#408012] Need help understanding recursion. — pedro oliva <lists@...>

Ive been reading Chris Pine's book 'Learn to Program' and its been going

11 messages 2013/06/06

[#408129] Getting Started With Development — Chamila Wijayarathna <cdwijayarathna@...>

I'm new to Ruby Development. I downloaded source from Github, but couldn't

24 messages 2013/06/11
[#408131] Re: Getting Started With Development — Per-erik Martin <lists@...> 2013/06/11

Ruby is often installed on linux, or can be easily installed with the

[#408146] Re: Getting Started With Development — "Chamila W." <lists@...> 2013/06/11

Per-erik Martin wrote in post #1112021:

[#408149] Re: Getting Started With Development — "Carlo E. Prelz" <fluido@...> 2013/06/11

Subject: Re: Getting Started With Development

[#408198] NokoGiri XML Parser — "Devender P." <lists@...>

Hi,

11 messages 2013/06/13

[#408201] trying to load a .rb file in irb — "Eric D." <lists@...>

I am trying to load a ruby program into irb and it will not load.

12 messages 2013/06/13

[#408205] Can I use Sinatra to render dynamic pages? — Ruby Student <ruby.student@...>

Hell Team,

18 messages 2013/06/13
[#408219] Re: Can I use Sinatra to render dynamic pages? — Nicholas Van Weerdenburg <vanweerd@...> 2013/06/14

You should be able to do this without JavaScript by using streaming.

[#408228] Re: Can I use Sinatra to render dynamic pages? — Ruby Student <ruby.student@...> 2013/06/14

Well, I got some good suggestions from everyone here. I thank you all for

[#408275] Compare and sort one array according to another. — masta Blasta <lists@...>

I have two arrays of objects that look something like this:

14 messages 2013/06/17

[#408276] Comparing objects — "Thom T." <lists@...>

How do I compare two objects in Ruby, considering only attributes

15 messages 2013/06/17

[#408307] getting the most out of Ruby — robin wood <lists@...>

I write a lot of scripts in Ruby, most are small simple things but some

13 messages 2013/06/18

[#408309] Creating ruby script exe — Rochit Sen <lists@...>

Hi All,

17 messages 2013/06/18

[#408357] Beginners problem with database and datamapper — cristian cristian <lists@...>

Hi all!

28 messages 2013/06/20

[#408437] How do I input a variable floating point number into Ruby Programs — "Michael P F." <lists@...>

I want to evaluate the following interactively:

10 messages 2013/06/23

[#408518] #!/usr/bin/env: No such file or directory — Todd Sterben <lists@...>

I am new to both linux and ruby. I am using Ubuntu and Ruby 1.9

17 messages 2013/06/27

[#408528] Designing a Cabinet class — Mike Vezzani <lists@...>

Hello all,

12 messages 2013/06/27

[#408561] Find elment in array of hashes — Rodrigo Lueneberg <lists@...>

array = {:id=>1, :price =>0.25} # index[0]

23 messages 2013/06/28

Re: Need help understanding recursion.

From: Tamara Temple <tamouse.lists@...>
Date: 2013-06-06 02:33:17 UTC
List: ruby-talk #408014
pedro oliva <lists@ruby-forum.com> wrote:
> Ive been reading Chris Pine's book 'Learn to Program' and its been going
> great up until I got to chapter 10 on recursion and thus has completely
> taken all my excitement from going forward. I understand that recursion
> is a method that will continue to call itself till there is an attribute
> to cause it to exit the loop. The example in the book though has me all
> sorts of confused. Can someone walk me through the example and bring
> back the excitement to continue to learn Ruby!
> 
> 
> 
> M = 'land'
> o = 'water'
> 
> world = [
>   [o,o,o,o,o,M,o,o,o,o,o],
>   [o,o,o,o,M,M,o,o,o,o,o],
>   [o,o,o,o,o,M,o,o,M,M,o],
>   [o,o,o,M,o,M,o,o,o,M,o],
>   [o,o,o,o,o,M,M,o,o,o,o],
>   [o,o,o,o,M,M,M,M,o,o,o],
>   [M,M,M,M,M,M,M,M,M,M,M],
>   [o,o,o,M,M,o,M,M,M,o,o],
>   [o,o,o,o,o,o,M,M,o,o,o],
>   [o,M,o,o,o,M,M,o,o,o,o],
>   [o,o,o,o,o,M,o,o,o,o,o]]
> 
> def continent_size world, x ,y
> 
>   if x < 0 or x > 10 or y < 0 or y > 10
>     return 0
>   end
> 
>   if world[y][x] != 'land'
>     return 0
>   end
> 
>   size = 1
>   world [y][x] = 'counted land'
> 
>   size = size + continent_size(world, x-1, y-1)
>   size = size + continent_size(world, x , y-1)
>   size = size + continent_size(world, x+1, y-1)
>   size = size + continent_size(world, x-1, y )
>   size = size + continent_size(world, x+1, y )
>   size = size + continent_size(world, x-1, y+1)
>   size = size + continent_size(world, x , y+1)
>   size = size + continent_size(world, x+1, y+1)
>   size
> 
> end
> 
> puts continent_size(world, 5, 5)

What I would suggest is installing pry and using it to step through your
program.

If it's basic understanding of recursion that's lacking right now,
perhaps a simpler example might do as well. The most common introduction
to a recursive function is the factorial function, which is nominally
defined as:

   n is a postive integer
   n! == n * (n-1) ... * 1

so:

def factorial(n)
  raise "#{n} is not a postive integer!" unless (n.is_a?(Integer) && n > 0)
  return 1 if n == 1 # this is the stopping condition
  n * factorial(n-1) # this calculates the factorial
end
   
2.0.0p195 :006 > factorial(1)
 => 1 
2.0.0p195 :007 > factorial(2)
 => 2 
2.0.0p195 :008 > factorial(10)
 => 3628800 
2.0.0p195 :009 > factorial(0)
RuntimeError: 0 is not a positive Integer
2.0.0p195 :010 > factorial(-10)
RuntimeError: -10 is not a positive Integer
2.0.0p195 :011 > factorial('a')
RuntimeError: a is not a positive Integer
2.0.0p195 :012 > factorial(nil)
RuntimeError:  is not a positive Integer

2.0.0p195 :014 > (1..10).inject([]){|memo, obj| memo << factorial(obj)}
 => [1, 2, 6, 24, 120, 720, 5040, 40320, 362880, 3628800] 


Another beginner recursive example is the Fibonacci sequence (0, 1, 1,
2, 3, 5, ..)

def fibonacci(n)
  raise "#{n} is not a non-negative Integer" unless (n.is_a?(Integer) && n >= 0)
  return 0 if n == 0
  return 1 if n == 1
  fibonacci(n-1)+fibonacci(n-2)
end

2.0.0p195 :037 > (0..10).reduce([]){|m,o| m << fibonacci(o)}
 => [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55] 

I've tossed these up on https://gist.github.com/tamouse/5718918


Stick with Ruby! It's great!

In This Thread