Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- assume
- Swagger
- Spring
- 파일삭제
- MVC
- assume That
- Git
- 팀과제
- swaggerUrl
- .out
- MVC모듈
- 스프링프레임워크
- Junit5
- springboot
- securityconfig
- assume True
- springframeworkruntime
- CS50
- 부스트코스
- springsecurity
- 컴퓨터과학
- 원격저장소
- .idea
- DispatcherServlet
- GitHub
- gitbash
- assuming That
- c언어
- container
- springmvc
Archives
- Today
- Total
도담이 먹여 살려야하는 집사
[CS50 4주차] Recursion 본문
- 함수는 특정한 시점에 필요한 계산 값을 또 다른 자기 자신을 사용해서 구할 수 있음.
- 재귀호출(recursive call)은 함수 f(x)가 값을 구하기 위해 자기 자신 f(x)을 호출하는 표현이 포함된 상황.
- 함수가 본인 스스로를 호출해서 사용할 수 있음.
- 반복문으로 구현한 코드보다 재귀호출로 구현한 코드가 좀 더 직관적.
- 무한루프에 빠진 경우
- 함수 호출을 메모리의 스택을 사용함.
- 계속 자기 함수를 호출하다가 스택이 넘치게 됨. >> stack overflow에러 발생
- 단순하게 자기 자신을 다시 호출하게 되면 무한루프에 빠질 수 있음. 다음 경우와같이 변화를 주어 무한루프에 빠지지않도록 해야함.
- 자기 자신f(x)를 다시 호출하는 경우
- 단순하게 결과값만 반환하는 경우
- 함수의 반복 횟수를 계산하기 위해 매개변수 count를 지정하는 경우
#include <stdio.h>
void hello(int count)
{
if (count == 0) // 종료 조건을 만듦. count가 0이면 다시 hello 함수를 호출하지 않고 끝냄
return;
printf("Hello, world! %d\n", count);
hello(--count); // count를 감소시켜서 다시 hello에 넣음
}
int main()
{
hello(5); // hello 함수 호출
return 0;
}
dojang.io/mod/page/view.php?id=584
C 언어 코딩 도장: 67.1 재귀호출 사용하기
67 함수에서 재귀호출 사용하기 함수 안에서 함수 자기자신을 호출하는 방식을 재귀호출(recursive call)이라고 합니다. 재귀호출은 일반적인 상황에서는 잘 사용하지 않지만 알고리즘을 구현할 때
dojang.io
재귀를 사용하여 팩토리얼 함수 구하기
$n! = 1\times2\times3\times...\times(n-1)\times n$
$n! = (n-1)!\times n$
$fact(n) = fact(n-1)!\\times n$
n=1라면 1! = 1을 반환
n >=2 fact(n - 1)! * n을 반환
#include <stdio.h>
int factorial(int n)
{
if (n == 1) // n이 1일 때
return 1; // 1을 반환하고 재귀호출을 끝냄
return n * factorial(n - 1); // n과 factorial 함수에 n - 1을 넣어서 반환된 값을 곱함
}
int main()
{
printf("%d", factorial(5));
return 0;
}
#include <cs50.h>
#include <stdio.h>
void draw(int h);
int main(void)
{
int height = get_int("Height: ");
draw(height);
}
void draw(int h)
{
if (h == 0)
{
return;
}
draw(h-1);
for(int i = 0; i < h; i++)
{
printf("#");
}
printf("\n");
}
'CS50' 카테고리의 다른 글
[CS50 4주차] Merge Sort (0) | 2021.02.09 |
---|---|
[CS50 4주차] Bubble Sort & Selection Sort (0) | 2021.02.04 |
[CS504주차] Linear Search (0) | 2021.02.01 |
[CS50 4주차] 알고리즘 표기법 (0) | 2021.02.01 |
[CS502주차] C언어 (0) | 2021.01.21 |
Comments