[#3109] Is divmod dangerous? — Dave Thomas <Dave@...>

14 messages 2000/06/06

[#3149] Retrieving the hostname and port in net/http — Roland Jesse <jesse@...>

Hi,

12 messages 2000/06/07

[#3222] Ruby coding standard? — Robert Feldt <feldt@...>

16 messages 2000/06/09

[#3277] Re: BUG or something? — Aleksi Niemel<aleksi.niemela@...>

> |I am new to Ruby and this brings up a question I have had

17 messages 2000/06/12
[#3281] Re: BUG or something? — Dave Thomas <Dave@...> 2000/06/12

Aleksi Niemel<aleksi.niemela@cinnober.com> writes:

[#3296] RE: about documentation — Aleksi Niemel<aleksi.niemela@...>

> I want to contribute to the ruby project in my spare time.

15 messages 2000/06/12

[#3407] Waffling between Python and Ruby — "Warren Postma" <embed@...>

I was looking at the Ruby editor/IDE for windows and was disappointed with

19 messages 2000/06/14

[#3410] Exercice: Translate into Ruby :-) — Jilani Khaldi <jilanik@...>

Hi All,

17 messages 2000/06/14

[#3415] Re: Waffling between Python and Ruby — Andrew Hunt <andy@...>

>Static typing..., hmm,...

11 messages 2000/06/14

[#3453] Re: Static Typing( Was: Waffling between Python and Ruby) — Andrew Hunt <andy@...>

32 messages 2000/06/16

[#3516] Deep copy? — Hugh Sasse Staff Elec Eng <hgs@...>

Given that I cannot overload =, how should I go about ensuring a deep

20 messages 2000/06/19

[#3694] Why it's quiet — hal9000@...

We are all busy learning the new language

26 messages 2000/06/29
[#3703] Re: Why it's quiet — "NAKAMURA, Hiroshi" <nahi@...> 2000/06/30

Hi,

[#3705] Re: Why it's quiet — matz@... (Yukihiro Matsumoto) 2000/06/30

Hi,

[ruby-talk:03597] Re: Another small quiz

From: "Dat Nguyen" <thucdat@...>
Date: 2000-06-21 22:10:31 UTC
List: ruby-talk #3597


>From: Aleksi Niemel<aleksi.niemela@cinnober.com>
>Reply-To: ruby-talk@netlab.co.jp
>To: ruby-talk@netlab.co.jp (ruby-talk ML)
>Subject: [ruby-talk:03595] RE:  Another small quiz
>Date: Wed, 21 Jun 2000 23:31:32 +0200
>
>Dat:
> > The following appeared in chapter 3 of the Ruby's User Guide:
> >
> > def fact(n)
> > 	if n == 0
> > 		1
> > 	else
> > 		n * fact(n-1)
> > 	end
> > end
> >
> > Is everything OK here?
>
>I can't see any problem here. We're calculating factorial in a normal
>imperative approach using recursion (which eats stack).
>
>Just don't call fact(-1) or with any negative argument (will eat you stack
>faster than you think, but *don't crash*, damn I like Ruby).
>
>Oh, and if you think why the code works, you can think it to be
>
>def fact(n)
>	if n == 0
>		return 1
>	else
>		return n * fact(n-1)
>	end
>	# puts n
>end
>
>The difference between the chapter 3 example and this code is that the
>latter will work even if you remove the comment character (but it won't
>print anything, if you happened to think so) whereas the chap 3 version
>won't.
>
>To amaze a little bit more (at least I was amazed with this), one can
>rewrite:
>
>def fact(n)
>	ret =
>		if n == 0
>			1
>		else
>			n * fact(n-1)
>		end
>	puts n
>	ret
>end
>
>Now we assign to ret the value of the whole if-else-end construct, which
>happens to be 1 or n*fact(n-1) depending of the if condition, then we print
>n and finally return the value of ret.
>
>If one doesn't say explicitly "return some_var" the return value of the
>function is the last evaluated value, that is the value of the last 
>executed
>code.
>
>	- Aleksi
>

Nothing is wrong.

When I watched fact with bigger arguments, the recursion gets slower and 
slower, so I wonder if recursion is fine in interpretative environment.

I cannot recall who advised to replace recursion with iteration wherever 
possible; even though it is claimed that recursion is natural but 
complicated recursion is not easy to grasp.

I prefer:
def fact(n)
	if n < 0
		raise "argument negative"
	end
	fact = 1
	for i in 2..n
		fact *= i
	end
	fact
end
________________________________________________________________________
Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com


In This Thread

Prev Next