2012-05-26 22 views
6

Faktöriyelere ilk yaklaşımın neden rubiyede çalışırken (sonsuz döngü) işe yaradığını merak ediyorum.Yakut özyinası sorunu

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 

cevap

7

Fark, if-else'inizi yapılandırdığınız yöntem değil, yöntem adından sonraki boşluktur.

fac (x-1) * x, fac((x-1) * x) olarak ayrıştırılır. Temel olarak, bir yöntem adı bir boşluk (veya bir açılış parantezi olmayan bir belirteç) tarafından izleniyorsa, yakut, yöntemi parantez olmadan çağırdığınızı varsayar. Dolayısıyla, parantezleri x-1 etrafında gruplama olarak, yöntem çağrısı sözdiziminin bir parçası olarak yorumlamaz.