문제

나는 사람을 설명 할 수있는 반 사람이 필요합니다. 각 사람에게는 사람의 자녀를 나타내는 사람-객체로 구성된 이름과 배열이 있습니다. 개인 수업에는 방법이있는 방법이 있습니다.이 방법은 그 사람의 총 자손 수와 동일한 정수를 반환합니다. 즉, 자녀와 손자와 자녀 등 등을 반환합니다. 재귀를 사용하여이를 수행하는 간단한 방법이 있습니까?

특정 세대에서만 자손을 세고 싶다면 어떻게해야합니까? 다시 말해, GetNumberofdescendants (int Generation)는 Generation = 1 인 경우 자녀의 수를 반환합니다.

도움이 되었습니까?

해결책

확신하는.

public class Person {

private Person[] myChildren;

public int getNumberOfDescendants() {
  if (myChildren == null || myChildren.length==0) return 0;
  int myDescendants = 0;
  for (Person child:myChildren) {
    myDescendants += 1; // for this particular child itself
    myDescendants += child.getNumberOfDescendants();  //add the child's children, grandchildren, etc.
  }
  return myDescendants;
}

}

다른 팁

getNumberOfDescendants()
{
  int sum = 0;
  for (int n=0; n < descendants.length; n++)
  {
    sum += 1 + descendants[n].getNumberOfDescendants();
  }
  return sum;
}

"1 +"는 우리가 실제로 수를 늘리는 유일한 곳입니다. 그 선은 나무의 모든 후손들에게 한 번 부름을받습니다.

그것은 실제로 재귀는 아니지만, 수업의 사례는 각 어린이에 대한 getNumberofdescendants () 방법을 호출 한 결과를 요약 할 수 있습니다.

또는 새로운 자손 (새로운 자녀 또는 자녀가 통보받지 못하면 각 인스턴스가 부모에게 알리도록 함으로써이 방법을 더 빨리 만들 수 있습니다. 그렇게하면 후손 수의 수는 항상 최신 상태 일 것입니다.

  public int getNumberDescendents()
  {
    int nDesc = 0;
    if (descendants != null)
    {
      for (Person p : descendants)
      {
        nDesc++; // this child
        nDesc += p.getNumberDescendents(); // this child's desc
      }
    }
    return nDesc;
  }

내가 예제를 썼을 때, 다른 사람들은 기본적으로 같은 것을 게시 했으므로 중복적으로 게시하고 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top