220411 TIL

eotkds·2022년 4월 11일
0

TIL

목록 보기
13/38

코드캠프 백엔드2기 21일차

배우면 배울 수록 기초가 부족해서 다시 복습하는 경우가 다반사이다. 최대공약수 문제를 풀다가 재귀함수를 알게 되었고, 그러다가 변수선언방식에 대해서 부족함을 알게되었다.

최대공약수 문제로 본 재귀함수

최대공약수는 소인수 분해로 구하는 방식과 유클리드 호재법으로 구하는 방식으로 크게 두 가지로 분류 되었다. 여기서는 유클리드 호재법을 소개하려고 한다.

방법은 이러하다.
1. a, b 수에서 mod 연산을 한다.
2. c 가 0이 아니면 b mod c 를 연산 한다.
2. mod 가 0 일 때 나눈 수가 최대공약수라고 한다.

이런 정보를 이제야 알았으며 수식으로 나타내면 다음과 같다

a % b = c
if(c === 0) GDC = b // GDC는 최대공약수를 뜻한다. 
a = b, b = c

a % b = c
if(c === 0) GDC = b
a= b, b = c
...
재귀함수

위 처럼 반복적으로 함수가 호출 되는데... 이것을 재귀함수라고 한다. 최대 공약수 문제로 풀이를 하자면...

function gcd(a, b) {
  const remainder = a % b;  // 1번
  if (remainder === 0) return b;  // 2번
  return gcd(b, remainder);  // 3번
}

풀이 중 다른 사람의 풀이가 인상적이서 다시 푸는 도중에 기본적인 것을 놓쳐서 소개하려고 한다. (알아보니 기본적인 것이 아닐 수도 있다.)

var, let, const 차이
//최소공배수와 최대공약수 문제였다. 
let c = 0;
for(let ab = a *b ; c = a % b; a=b, b=c){}
return [b, ab / b] // ab is not defined

ab 는 최대공배수를 구하하려고 선언한 것인데 선언 오류가 났다.
이것은 변수 선언 방식 의 차이라고 한다.

var a = 'a'

a = 'b' // var은 재 할당이 가능하다.

var a = 'c' // var은 재선언이 가능하다. 


let aa = 'aa'

aa = 'bb' // let 또한 재 할당이 가능하다.

let aa = 'cc'

console.log(aa) //SyntaxError: Identifier 'aa' has already been declared.

//let은 재선언이 불가능 하다. 

정리하자면 let은 재할당은 가능하지만, 재선언은 불가능하다. `const' 는 재선언과 재할당이 모두 불가능하다.

호이스팅?

나중에 다시 정리하겠지만 ㅠ 이것은 선언 방식에 따른 것이라고 한다.
위 문제는 var로 해결할 수 있었다.. 나중에 hoisting은 다시 정리하겠다.

참조

[유클리드 호제법(Euclidean-algorithm), velog, 2022년04월11일 접속]
https://velog.io/@yerin4847/W1-%EC%9C%A0%ED%81%B4%EB%A6%AC%EB%93%9C-%ED%98%B8%EC%A0%9C%EB%B2%95
[[JAVA] 재귀함수(Recursion Function) 개념 및 예제, [차근차근 개발일기+일상], tistory, 2022년04월11일 접속]
https://crazykim2.tistory.com/591
[재귀함수, 나무위키, 2022년04월11일 접속]
https://namu.wiki/w/%EC%9E%AC%EA%B7%80%ED%95%A8%EC%88%98
[[Javascript] 최대공약수 알고리즘 (with 유클리드 알고리즘), velog, 2022년04월11일 접속]
https://velog.io/@eensungkim/Javascript-%EC%B5%9C%EB%8C%80%EA%B3%B5%EC%95%BD%EC%88%98-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-with-%EC%9C%A0%ED%81%B4%EB%A6%AC%EB%93%9C-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98
[var, let, const 차이점, velog, 2022년04월11일 접속]
https://velog.io/@bathingape/JavaScript-var-let-const-%EC%B0%A8%EC%9D%B4%EC%A0%90
[var, let, const 차이점은?, GitHubGist, 2022년04월11일 접속]
https://gist.github.com/LeoHeo/7c2a2a6dbcf80becaaa1e61e90091e5d

profile
개발자준비중

0개의 댓글