자의 눈금은 프랙탈과 비슷하다. 

그렇다면, base case는 어떻게 될까?

가장 작은 눈금이 0 보다 커야한다.

English Ruler 클래스를 만들어보자. 

내부 작동원리는 프로그래머의 자율성을 따라야 하므로

생성자와 drawRuler() 만 노출하고

사용자에게 노출하기 싫은 메소드는 private 필드에 넣어야 한다.

 멤버 변수 m_majorLength는 눈금 막대의 길이이고(말그대로 눈금 막대의 길이이다)

m_numInches는 자 전체의 길이이다.

class EnglishRuler{
public:
	EnglishRuler(size_t numInches, size_t majorLength) :
		m_numInches { numInches }, m_majorLength { majorLength }{
	}

public:

	void drawRuler(){
		drawLine(m_majorLength, "0");

		for(size_t i = 1; i < m_numInches; i++){
			drawInterval(m_majorLength - 1);
			drawLine(m_majorLength, std::to_string(i));
		}
	}

private:

	void drawLine(size_t tickLength, std::string tickLabel = ""){
		for(size_t i = 0; i < tickLength; i++){
			cout << "-";
		}

		if(tickLabel != ""){
			cout << tickLabel;
		}

		cout << endl;
	}

	void drawInterval(size_t centerLength){
		if(centerLength > 0){
			drawInterval(centerLength - 1);
			drawLine(centerLength);
			drawInterval(centerLength - 1);
		}
	}

public:
	size_t m_numInches;
	size_t m_majorLength;
};

 

'알고리즘 + 자료구조' 카테고리의 다른 글

트리  (0) 2023.06.15
Recursion(재귀)  (0) 2023.06.14
Singly Linked List  (0) 2022.10.17
순수 가우스 소거법 Naive Gaussian Elimination  (0) 2022.07.14
호너씨와 조립제법과 수도미분  (0) 2022.07.10
복사했습니다!