가. 개념:

(5 + 3) 이라는 수식을 평가하면 8이 된다.

괄호안에 있는 3가지의 요소 5, +, 3 각각은 어떻게 평가 되는지 보면

5라는 수식을 평가하면 5이고

3이라는 수식을 평가하면 3이다.

+ 수식을 평가한다면 그 값은 왼쪽과 오른쪽을 더한것이다.

(5 + 3) 이라는 수식을  받고 평가를 하는데

3요소로 쪼갠뒤 그 각각을 또 평가했다.

이는 충분히 재귀적이다.

큰 수식의 평가는 각각의 요소를 이루는 작은 수식의 평가로 이루어진다는 것이다.

그러면 

((5 + 3) * 7) 이라는 수식은 중첩 되어 있다.

이도 충분히 재귀적인 평가로 값을 얻어낼수 있는데

재귀적인 마인드로 평가순서를 살펴보면 다음과 같다.

1. ((5 + 3) * 7) 수식은 (5 + 3) , *, 7 이라는 세가지 요소로 이루어짐

2. *는 (5 + 3) 수식과 7 수식을 곱한것

3. 7수식은 7이라는 값

4. (5 + 3) 수식은 5, +, 3 이라는 세가지 요소로 이루어짐

5. +는 5 수식과 3수식을 더한것

6. 3수식의 값은 3

7. 5 수식의 값은 5

8. + 수식의 결과로 8

9. * 수식의 결과로 56


rules:
괄호가 나오면 안에 있는 요소를 세요소로 나눈다는점

숫자는 숫자 자체로 평가된다는 점

+ , * 같은 것들은 양쪽을 더하거나 곱한 값을 평가한다는 점


이러한 규칙의 일관성을 적용하기 위한 깔끔한 방법은 없을까?


나. 트리개념에 적용:





(5 + 3) 이라는 수식을 트리로 나타내면 다음과 같다.

이러한 2진트리의 장점은 트리를 재귀적으로 순환할수 있다는 점이다.

중첩도 쉽게 표현이 가능하다.

 (NULL 생략)

((5 + 3) * 7) 수식 트리

이는 수식이 어떻게 중첩이 되든간에 최상위 루트에서 순환하면서 값을 

얻어낼수 있다는 사실을 보여준다.
Posted by 멍충한아싸

댓글을 달아 주세요