2012-05-26 11 views
6

मुझे आश्चर्य है कि क्यों फैक्टोरियल का पहला दृष्टिकोण रूबी में काम नहीं करता है (अनंत लूप) जबकि दूसरा करता है।रुबी रिकर्सन समस्या

def fac (x) 
    if x == 0 
    return 1 
    else 
    return (fac (x-1) * x) 
    end 
end 

def fact(num) 
    return 1 if num == 0 

    fact(num - 1) * num 
end 

उत्तर

7

अंतर विधि के नाम के बाद अंतर है, न कि जिस तरह से आपने अपना संरचित किया है।

fac (x-1) * xfac((x-1) * x) के रूप में पार्स किया गया है। असल में यदि किसी विधि का नाम किसी स्थान (या किसी भी टोकन जो एक प्रारंभिक कोष्ठक नहीं है) के बाद किया जाता है, तो रूबी मानती है कि आप बिना किसी कोष्ठक के विधि को बुला रहे हैं। तो यह x-1 को समूह कॉलिंग के रूप में समेकित करता है, विधि कॉल वाक्यविन्यास का एक हिस्सा नहीं।