2012-01-31 3 views
2

숫자의 계승을 반환하는 재귀 함수를 쓰려고합니다. 숫자가 0이거나 음수이면 0을 반환해야합니다. 그러나 테스트 할 때마다 항상 0을 반환합니다. 누군가가이 부분을 좀 밝힐 수 있습니까?재귀 함수 - 0을 계속 반환합니까?

int factorial(int integer) 
{ 
    if(integer <= 0) 
    { 
     return 0; 
    } 

    else 

     return integer* (factorial(integer-1)); 

} 

답변

4

-1을 결국 0 자신을 호출 한 다음 이런 식으로 호출해야합니다 :

return integer * (factorial(0)) 

return integer * 0 

에 해결됩니다 0

+0

모든 답변을 주셔서 감사합니다. 그러나 0 또는 음수를 입력하면 메서드가 0을 반환해야한다고 들었습니다. 구현할 방법이 없습니까? – matt

+0

물론, 다른 "if"를 추가하십시오 : 매개 변수가 1이면 1을 반환하십시오. – theglauber

4

결과를 항상 기본 케이스에서 0으로 늘립니다. Factor of 0은 이 아니라 1입니다.

int factorial (int integer) { 
    if (integer < 1) { 
     return 0; 
    } else if (integer == 1) { 
     return 1; 
    } else { 
     return integer * factorial(integer-1); 
    } 
} 

하지 짧은 구현하지만, 매우 읽기 :

  • Empty ProductWikipedia
  • 입력이 덜 1보다 때 함수가 0을 반환해야하는 경우 FactorialWikipedia

    • .

    0

    당신은 0 곱 항상 반환 1을 반환해야합니다 0 :

    if(integer < 2) 
    { 
        return 1; 
    } 
    
    3

    과 같이 기본 경우 1을 반환해야합니다 귀하의 기능 :

    if (integer <= 0) { 
        return 1; 
    } 
    

    당신 증식하고 번호 등 0을 곱한 숫자가 0임을 압니다. 대신 숫자를 곱한 값이 하나이기 때문에 곱셈 식 ID 인 1을 사용해야합니다. 이 정수 자체를 호출 유지으로

    1

    단순히 0 대신 1을 사용하십시오. 0을 사용할 때 0을 곱하여 0을 반환합니다.

    예 :

    5! = = 120 5.4.3.2.1하지 5.4.3.2.1.0 = 연필과 종이 간단한 테스트 케이스 실행 0

    2

    시도 : 그래서

    main: 
        factorial(3) 
        return 3 * factorial(2) 
         factorial(2) 
         return 2 * factorial(1) 
          factorial(1) 
          return 1 * factorial(0) 
           factorial(0) 
           return 0 
          return 1 * 0 (equals 0) 
         return 2 * 0 (equals 0) 
        return 3 * 0 (equals 0) 
    

    를, 그것이 모든 재귀 호출이 도달 할 것으로 보인다 " 0 ". 이 조건을 추가

    보십시오 : 당신은 정수 재귀 호출을 통해 제로까지 갈 수 있도록하고 정수를 발견하면 제로를 반환하는

    else if(integer == 1) 
        return 1; 
    
    1

    은 0이다. 따라서 마지막 재귀 호출에서 결과를 0으로 곱합니다.그러므로 당신은 언제나 대답으로 0을 얻고 있습니다.