2011-04-13 7 views
1

y를 해결하려고합니다. p 조합을 선택하십시오. 저는 초보자 인 Javascript입니다. 이것은 X * (X-1) * (X-2) ... * 1.Factorials/Combinations yield NaN 때가 안되는 경우

function factorial(z) 
{ 
    var product = z; 
    if (z == 0) 
    { 
     return 1; 
    } 
    else 
    { 
     for (var m = 1; m < z; m++) 
     { 
      product = m * product; 
      return product; 
     } 
    } 
} 

그때가 이렇게 inteded 하였다

I는 팩토리얼 함수의 정의를 생산 함수는 계승 함수를 사용합니다.

function placeBoxes() 
{ 
    var ids = 0; 
    for (var y = 0; y < (numOfRows-1); y++) 
    { 
     for (var p = 0; p < (y+1); p++, ids++) 
     { 
      x = document.createElement('div'); 
      x.className = "box"; 
      x.id = ids; 
      x.innerHTML = (factorial(y))/((factorial(y-p))*(factorial(p))); 
      document.getElementById('holdsBoxes').appendChild(x); 
     } 
    } 
} 

조합을 선택해야합니다. 실험 목적을 위해 numOfRows는 실제로 5와 30 사이입니다. 0C0 1C0 1C1 2C0 2C1 2C2 등 ... 이것은 1, 1, 1, 2, 1 등등에 해당합니다 ...

누구든지 내가 잘못한 것을 알고 있습니까? 두 번째, 세 번째, 다섯 번째, 여덟 번째, 아홉 번째 및 다른 많은 값 대신 NaN을 얻습니다.

편집 : 모두에게 감사합니다! 문제가 해결되었습니다. 계승 함수가 엉망이되었습니다.

답변

1
for (var m = 1; m < z; m++) 
{ 
    product = m * product; 
    return product; 
} 

귀하의 회신에 product가 표시됩니다. 이거 확실하니? 루프 외부에 product을 반환하지 않으시겠습니까?

이것은 또한 NaN의 원인입니다. z이 1 일 경우 어떻게해야합니까? m < zm < 1이고 항상 false입니다. 그래서 그 루프 몸체는 결코 호출되지 않습니다. return 문은 호출되지 않습니다.

따라서 함수는 undefined을 반환합니다. 그리고 undefined * 1 === NaN

1

변경

for (var m = 1; m < z; m++) 
    { 
     product = m * product; 
     return product; 
    } 

for (var m = 1; m < z; m++) 
    { 
     product = m * product; 
    } 
    return product; 

에 당신은 결코 루프 내가 계승 기능이 잘못이라고 생각

1

를 완료하지 있습니다. 이것을 다음으로 변경하십시오 :

function factorial(z) 
{ 
    var product = z; 
    if (z == 0) 
    { 
     return 1; 
    } 
    else 
    { 
     for (var m = 1; m < z; m++) 
     { 
      product = product*(product - m); 
     } 
     return product; 
    } 
} 
+0

'* ='은 (는) 잘못된 JavaScript입니다. – Raynos

+0

죄송합니다 - 이제 해결되었으므로 수정되었습니다. – appi2012

+0

또한 계승을위한 m * product의 이전 방법도 잘 작동합니다. 이는 단지 대안 일뿐입니다. 다른 사람들도 지적한 바와 같이, 오류는 for 루프 내부에 반환 된 것입니다. – appi2012