From: "Eric I." Date: 2007-01-15T02:05:11+09:00 Subject: Re: how to translate base 10 number into base 2 number Hi Li, First, here's a solution: def ten_to_two(num1) return [] if num1 <= 0 first,second=num1.divmod(2) ten_to_two(first) << second end And note that you can change the << into a call to unshift if you want the bits in the reverse order. As for why your solution didn't work, let me offer two things. First, you never do anything with the result of your recursive call to ten_to_two. Somehow you need to combine it with the partial result you calculated immediately beforehand. Second, you're using instance variables (tagged with the @). That's generally done in methods defined within a class to hold the state of the instance. For a "naked" method, you generally stick to local variables (no @). Eric ================ Interested in hands-on, on-site Ruby training? See www.LearnRuby.com for information about a well-reviewed class. chen li wrote: > Hi all, > > I want to write a method to tranlate base 10 number > into base 2 number. I want to call the method within > itself. But it doesn't work. What is the right way > to do something like this? > > Thanks, > > Li > > ##### > def ten_to_two(num1) > @array=[] > if num1>2 > first,second=num1.divmod(2) > @array< > #call the method itself > ten_to_two(first) > > else > @array< end > return @array.reverse > end > > puts ten_to_two(5) > > ##output > >ruby assembly1.rb > nil > nil > >Exit code: 0