 # Stack level too deep (SystemStackError)

#1

When writing a code to find the factor of a given number, i ran into the
following error message:

“factor.rb:48: parse error, unexpected kEND, expecting \$”

I was hoping someone could shed light on the problem. Heres the code:

def isprime testNum
testWith = 2
run = 1
while testNum > testWith and run == 1
prime = testNum % testWith
if prime != 0
testWith = testWith + 1
else
run = 2
end
end

``````if prime != 0
return true
else
return false
end
``````

end

def factor toFactor
factored = false
numbers = Array.new
numbers.push toFactor
testWith = 2
while factored == false and numbers.last > testWith
test = numbers.last
isFactor = numbers.last%testWith
if isFactor == 0
numbers.pop
numbers.push(testWith)
numbers.push(test/testWith)
factored = true
else
testWith = testWith + 1
end
end

``````eval = numbers.last
if isprime(eval) == false
numbers.pop
add = factor(eval)
numbers.push(add)
end
end

numbers
``````

end

f = factor(100)

puts f.join(’ x ')

Note: subsituting " eval = numbers.last" for "numbers.each do |eval|
"avoids the error.

Please Help!

#2

john s wrote:

``````  run = 1
return true
``````

testWith = 2
end
numbers

Please Help!

I don’t think Array#last takes a block.

-Justin

#3
``````    eval = numbers.last
if isprime(eval) == false  #
numbers.pop          #
add = factor(eval)   #unindent this bit
numbers.push(add) #
end                                  #
end # get rid of this.
``````

then it works.
-tim

#4

The last bit could be changed to:
print f.map{|x|x.is_a?(Array) ? “(#{x.join(” x “)})” : x}.join(" x ")

To add the correct brackets.