2013-10-16 2 views
0

입력 된 자연수 내에서 숫자의 합계 인 자연수를 반환하는 함수를 구현하려고합니다. 나는 무한 루프를 계속 유지한다. 나는 재귀 호출을 반환해야하지만, 나는 이것을 파악할 수 없다는 것을 안다. 여기 내가 지금까지 가지고있는 것입니다 :자연수 재귀를 사용하는 숫자의 합

private static NaturalNumber sumOfDigits(NaturalNumber n) { 
     NaturalNumber zero = new NaturalNumber2(0); 
     if (n.compareTo(zero) == 0) { 
      return zero; 
     } else { 
      NaturalNumber z = new NaturalNumber2(n.divideBy10()); 
      n.divideBy10(); 
      z.add(sumOfDigits(n)); 

     // return ___; 

     } 
    } 

무엇을 반환해야합니까? 반송 중 z가 작동하지 않습니다.

+0

를? – Cruncher

+0

오늘 우리는 바쁜 날처럼 돌아 다니고 있습니다. 그렇지 않습니까? 지난 24 시간 동안 시작된 4-5 개의 다른 스레드 중 하나를 검토하여 기본 재귀를 논의하는 것이 좋습니다 - 동일한 원칙이 적용됩니다. –

+4

@Cruncher - 더 복잡하게 만듭니다. –

답변

0

z.add(sumOfDigits(n));z.add(sumOfDigits(n.divideBy10()));이어야합니다. 요점은 모든 문제가 아닌 나머지 대답 만 처리하려는 재귀에 있습니다.

+0

''n.divideBy10()''내가 추가해야하는 숫자를 알려줍니다. 재귀가 하나의 숫자를 갖는다면, 10으로 나눌 것입니다. 내가 원하는 것은 아닙니다. – WestonBuckeye

+1

@WestonBuckeye 그것입니까? '5463/10'은 무엇입니까? 그것은 '5'또는 '3'이 아닙니다. 네가 'n % 10'을 찾고 있다고 생각해. – Cruncher

+0

@Cruncher 좋아, 그 믹스를 고쳤어.하지만 내가 무엇을 돌려 줄까요? – WestonBuckeye

1

n은 프로 시저에 전달 된 동일한 번호 인 재귀 호출을 작성합니다. z에 대한 숫자를 제거하면 나머지 숫자로 재귀 호출을 수행해야합니다.

당신의 int가 될 것이다 사용한 경우 당신은 모드 (10)와 자리를 제거하고 (10)에 의해 분할하여 나머지 자리를 얻을 수

: 당신의 자연수 클래스를 필요합니까 무엇

return (n % 10) + sumOfDigits(n/10); 
+0

이것은 int에 대해이를 만들 때의 정확한 값입니다. 여기에서 NaturalNumber를 반환해야하며''z.add (sumOfDigits (n)); ''를 반환하지 않습니다. – WestonBuckeye

+0

z.add는 무엇을 반환합니까? 그것은 add의 결과를 리턴합니까? 아니면 z의 상태를 변경하고 void를 리턴합니까? – GregA100k