수학: 계산기



기술은 우리의 질문에 빠르고 효율적으로 답해줍니다.

가령, 왜 하늘은 파란가, 내 친구 생일은 언제지, π 값은 얼마인가를 물어볼 수 있습니다.

기술을 사용해서 이런 질문에 대한 답을 받는 것으로는 충분하지 않습니다.

기술의 진짜 강점은 자신이 스스로 만들 수 있는 플랫폼으로 사용할 때 펼쳐집니다.

내가 원하는 기능이 들어간 계산기를 만든다고 합시다.

기본 계산기 안에 넣고 싶은 기능은 무엇인가요?

아래에 적어보세요.

(__)




좋습니다. 이 기능을 추가한다고 합시다.

이 추가 기능을 어린 아이에게 설명한다면 어떻게 설명하시겠습니까?

(__)




수학과 컴퓨터 과학에서는 함수를 일련의 입력 값에 어떤 처리를 한 후 나오는 출력값을 얻는 것으로 정의합니다. 가령, F(X)=X*X 이라면 F(3)=9, F(10)=100 입니다.


계산기는 add 라는 함수를 만듭니다. 이 함수는 두 개의 입력값을 받아 두 숫자의 합을 출력값으로 만듭니다. 가령, 더하기(3, 5) → 8 이 되죠.

add 알고리즘은 이렇습니다.

  1. 입력값에 두 숫자를 넣는다.

  2. 두 수를 더한다.

  3. 결과를 출력한다.



계속하려면 다음을 클릭하세요.




더하기 알고리즘의 예는 파이썬 프로그래밍 코드에도 있습니다.

코드를 실행한 후, 다양한 입력값을 넣어보세요.


이제 add(a,b) 코드를 볼 때마다 그 결과를 a와 b를 더한 것으로 보세요.

그렇지만 이 활동에서는 +(더하기로 처리)를 사용하기를 써서 더하는 함수를 구현해도 괜찮습니다.



곱셈은 어떨까요? multiply(a,b)라고 하는 함수를 사용하면 됩니다.

그러면 두 입력값을 받아 곱을 한 결과를 보여줍니다.

기존에 있는 덧셈 함수를 사용해서 곰셈 함수를 만들 수 있나요?

다음으로 가시려면 [다음]을 클릭하세요.




계산기에서 곱셈함수를 만드는 한 방법은 재귀를 사용하는 것입니다. 재귀란 수학이나 컴퓨터 과학에서 사용하는 개념입니다. (주: 재귀는 자신을 정의할 때 자기 자신을 재참조하는 방법을 뜻합니다.) 재귀는 자기 자신을 알고리즘에 넣어서 풀 수 있는 작은 문제 단위로 문제를 푸는 형태입니다.

수학에서 재귀의 유명한 예제는 피보나치 수열을 들 수 있습니다. 피보나치 수열은 1, 1, 2, 3, 5, 8, 13, .... 와 같이 다음에 올 숫자는 그 전 두 숫자의 합의로 정의되는 형태입니다. F(n)=F(n-2)+F(n-1)로 말할 수 있습니다. 가령, 1에 1을 더하면 2가 되고, 그 다음 1에 2를 더하면 3이되는 형태로 됩니다. 이 패턴은 곰셈 알고리즘을 개발할 때 유용합니다.


계속하려면 [다음]을 클릭하세요.




add 함수를 사용해서 곱셈 함수를 하는 코드를 살펴봅시다.

과제 : 수 a와 수 b를 곱하기

법칙1 : 만일, b가 1이면, 정답은 a 이다. 법칙2 : a와 b-1를 곱한 결과에 a를 더한다.

예시: 5*4

(5 * 3) + 5

((5 * 2) + 5) + 5

(5 * 1) + 5) + 5 + 5

5 + 5 + 5 + 5

Answer is 20



계속하려면 [다음]을 클릭하세요.





재귀함수에서 "기저사례(base case)"는 필요하다.

왜냐하면 재귀함수가 언제 멈춰야 할지 정해주기 때문이다.

법칙1은 기저사례다. 이유는 곱셈의 항등원이 1이기 때문이다.

이 함수는 b가 1이면 반드시 멈춰야 한다.


앞의 예에서 코드를 다시 재기록했었다.

이 알고리즘에 근거한 자신만의 함수를 다시 적어보자.


과제 : 수 a와 수 b를 곱하기


법칙1 : 만일, b가 1이면, 정답은 a 이다.

법칙2 : a와 b-1를 곱한 결과에 a를 더한다.



add 함수를 사용해서 곰셈함수를 적을 수 있다면, [다음]을 클릭하세요.





곱셈 알고리즘의 예제로 아래 파이썬 코드 프로그래밍을 제시했다.

다양한 입력값을 넣어보며 코드를 [실행]해보자.

(역자 주: 원문에서는 파이선 코드가 나옵니다)



이것은 덧셈함수를 사용해서 곰셈 함수를 만드는 예시다.


만일 재귀함수를 멈추게 하는 법칙1의 기저사례가 없다면 어떤 일이 일어날까? 함수는 절대 멈추지 않을 것이다. 그렇다면 왜 컴퓨터는 이 문제를 확인하지 않을까?

이 문제는 멈춤문제(halting problem)로 알려져 있다. 우리 인간은 진행과정을 보며 끝나려면 시간이 얼마나 걸릴지 알 수 있다. 그러나 컴퓨터는 언제 끝날지 알 수 없다. 따라서 알고리즘을 작성할 때 추가로 주의해야 한다.

계속하려면 [다음]을 클릭하세요.






이전 예제에서 완수한 것을 바탕으로

즉 재귀 빼기 함수를 사용하여 다음은 앞의 예에서 수행 한 내용을 바탕으로,

뺄셈함수를 재귀적으로 사용해서 아래 나눗셈 함수의 없어진 부분을 채워봅시다.



재귀는 이해하기 어려운 개념입니다.

따라서 재귀함수 문제를 다룰 때 낙심하지 마세요.

계속해서 코딩해보고, 시각화하며, 시도해 보세요.




지금까지 계산기를 만드는 작업이 잘 진행되고 있습니다.

지금까지는 기본적인 작동방법에 관한 설명이었습니다.

이제 다음 단계로 가서 제곱근함수와 로그함수를 만들어 봅시다.


square(a)→a2 or log(a)→log10a로 표현합니다.


나만의 계산기를 만드는 작업은 우리가 큰 문제를 대할 때,

함수를 사용해 작은 문제들로 나누어 해결하는 컴퓨팅 사고 활동의 좋은 예입니다.


함수를 사용함으로써 작은 문제로 나눠 해결하는 것을

이미 우리는 앞에서 곰셈 알고리즘을 만들 때나 나눗셈알고리즘을 다룰 때 사용했었습니다.




이 주제에 대한 구체적인 설명이 필요하면 재귀와 함수 프로그래밍을 인터넷에서 찾아보세요.

부트스트랩 과정은 프로그램을 통해 학생들에게 대수와 기하학적 개념을 가르칩니다.

이 활동에서 사용 가능한 교육기준도 참고 하세요.

기술을 사용할 수 없는 상황에서 학생들은 알고리즘을 작성할 수 있고,

그것을 알고리즘을 설계하는 사람에게 테스트해주라고 요청할 수 있습니다.

잘했습니다! 아래 버튼을 클릭해서 이 코스를 계속하세요.