ㅈㄱㄴ
일학년 프린이가 처음으로 옵젝오리엔티드를 하면서
루프도 간당간당 실수가 나는데
리커젼을 배워버림. 근데 대체 원리가 이해가 안감.
그나마 리턴스테이트먼트가 있는 리커시브 메소드나 펑션은 어떻게 잡아야될지 알겟지만 리턴값이 none일 경우는 더 헷갈려서 원리르 쉽게 알려줄 횽을 찾음.
Base case를 if statement로 해서 마치 while loop 컨디션을 쓰듯 if를 쓰는건 알겟음 그리고 이 base case 조건을 만족할때까지 리커젼이 돌아가는 거라고 이해를 햇음.
근데 이런 케이스가 나오면 모르겟음.
예를 들어 Tree(self, sub: List[Tree], coordinate: tuple[x,y], size: int)의 형태의 트리가 있다고 쳤을때 트리와 섭트리의 coordinate을 트리 사이즈 기준으로 비율에 맞춰서 업뎃 해주는 메소드를 만든다고 쳐봐. 아래는 리커젼에 대한 내 이해를 바탕으로 쳤던 안돌아가는 코드 Init값은 self.sub = [], coordinate = (0, 0) size = 섭트리 사이즈의 합.
def update(self, new: tuple(int, int)) -> None
If self.sub == []: 이게 베이스 케이스 리프거나 루트 밖에 없을때 끝
self.coordinate = new
else:
self.coordinate = new
for s in sub: 여기는 서브트리 업뎃
x, y = self.coordinate
percent = s.size // self.size
s.coordinate = s.update((x, y*percent))
일학년 프린이가 처음으로 옵젝오리엔티드를 하면서
루프도 간당간당 실수가 나는데
리커젼을 배워버림. 근데 대체 원리가 이해가 안감.
그나마 리턴스테이트먼트가 있는 리커시브 메소드나 펑션은 어떻게 잡아야될지 알겟지만 리턴값이 none일 경우는 더 헷갈려서 원리르 쉽게 알려줄 횽을 찾음.
Base case를 if statement로 해서 마치 while loop 컨디션을 쓰듯 if를 쓰는건 알겟음 그리고 이 base case 조건을 만족할때까지 리커젼이 돌아가는 거라고 이해를 햇음.
근데 이런 케이스가 나오면 모르겟음.
예를 들어 Tree(self, sub: List[Tree], coordinate: tuple[x,y], size: int)의 형태의 트리가 있다고 쳤을때 트리와 섭트리의 coordinate을 트리 사이즈 기준으로 비율에 맞춰서 업뎃 해주는 메소드를 만든다고 쳐봐. 아래는 리커젼에 대한 내 이해를 바탕으로 쳤던 안돌아가는 코드 Init값은 self.sub = [], coordinate = (0, 0) size = 섭트리 사이즈의 합.
def update(self, new: tuple(int, int)) -> None
If self.sub == []: 이게 베이스 케이스 리프거나 루트 밖에 없을때 끝
self.coordinate = new
else:
self.coordinate = new
for s in sub: 여기는 서브트리 업뎃
x, y = self.coordinate
percent = s.size // self.size
s.coordinate = s.update((x, y*percent))
자기자신의 서브트리가 없으니 condition statement에 걸리게 만들어야지. if.sub 저부분에서