[#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:03595] RE: Another small quiz

From: Aleksi Niemel<aleksi.niemela@...>
Date: 2000-06-21 21:31:32 UTC
List: ruby-talk #3595
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

In This Thread

Prev Next