일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- C#으로 알고리즘 구현
- 알고리즘 이론
- 수술영상 phase recognition
- 앱인벤터 앱만들기
- MySQL 연동
- 퀵정렬
- 분할정복
- 동적계획 알고리즘
- 앱인벤터 기초
- 이클립스 DB연동
- 앱인벤터 TinyDB
- medical AI
- 앱인벤터
- LLM 논문
- 수술영상 분류
- 재귀함수
- TooLLLM_facilitating Large Language Models to Maset 16000+ Real-World APIs
- c#
- 오라클로 배우는 데이터베이스 개론과 실습 2판
- 앱인벤터 어플만들기
- LLM 논문리뷰
- 그리디 알고리즘
- 최소 신장 트리
- 앱인벤터 구구단
- LaMa2
- 알고리즘 공부
- timestamp supervision
- 알고리즘
- 분할정복 알고리즘
- 데이터베이스
- Today
- Total
YJ_Scribbles
#A02_Factorial 본문
목표 : 팩토리얼을 반복문과 재귀적 방법으로 코딩 & 실행시간 측정
★ Factorial이란?
- 1부터 어떤 양의 정수 n까지의 정수를 모두 곱한 것
★ 재귀함수란?
- 자기자신을 호출하는 함수를 말함.
▶ 재귀함수 코드
▶ 반복문 코드
★ 만들고자 하는 프로그램
1. 지난 시간에 만든 솔루션에서 새로운 프로젝트 추가하기
- [솔루션 위에서 마우스오른쪽 → 추가 → 새 프로젝트 → WPF 앱]을 눌러 새로운 프로젝트 추가
2. xaml 코드작성하는 부분에서 해야 할것
1) 도구상자에서 필요한 도구 추가하기
- TextBlock * 1
- TextBox * 1
- Button * 1
- ListBox * 1
2) TextBlock 내용 바꿔주기
- 바꾸고자 하는 TextBlock을 선택하고 [속성 → 공용 → Text]에서 원하는 text로 바꿔준다
3) 도구 이름 바꾸기
- 'TextBox' : [속성 → 이름]에서 원하는 이름으로 바꿔준다(txtNo)
- 'ListBox' : [속성 → 이름]에서 원하는 이름으로 바꿔준다(lstResult)
-> 이름을 바꾸는 이유는 나중에 코드를 작성할 때 각 도구의 이름으로 함수를 작성하기 때문
4) 원하는 위치에 각 도구들 위치시키기
3. Button 클릭하는 함수 만들기
1) Button위에서 더블클릭하여 코드 창으로 넘어간다
2) 아래와 같이 코드를 작성해준다
private void Button_Click(object sender, RoutedEventArgs e)
{
lstResult.Items.Clear();
long f = long.Parse(txtNo.Text);
long x = Factorial(f);
long y = RFactorial(f);
lstResult.Items.Add(x + ", " + y);
}
3) Factorial(f) 함수 만들기 - 반복문 사용하는 코드
- Factorial(f)에 빨간색 밑줄이 생김 → 마우스를 갖다대면 전구모양의 아이콘이 생김 → 전구모양 아이콘 클릭 → 메서드 생성 클릭
private long Factorial(long f)
{
long fact = 1;
for (int i = 2; i <= f; i++)
fact *= i;
return fact;
}
4) RFactorial(f) 함수 만들기 - 재귀함수 사용하는 코드
- RFactorial(f)에 빨간색 밑줄이 생김 → 마우스를 갖다대면 전구모양의 아이콘이 생김 → 전구모양 아이콘 클릭 → 메서드 생성 클릭
private long RFactorial(long f)
{
if(f == 1)
return 1;
else
return RFactorial(f - 1) * f;
}
4. 실행시간 측정 코드 작성하기
위의 코드는 실행시간을 측정하는 코드의 예시이다. 이를 참고하여 코드 작성을 진행할 것이다.
- Button_Click함수에 작성된 코드를 다음과 같이 바꿔준다
private void Button_Click(object sender, RoutedEventArgs e)
{
lstResult.Items.Clear(); // 리스트 박스 초기화
long f = long.Parse(txtNo.Text);
// 반복문
var watch = System.Diagnostics.Stopwatch.StartNew(); // 시간측정 시작
long x = Factorial(f);
watch.Stop(); // 시간 측정 종료
var elapseds = watch.ElapsedTicks; // 단위 바꿔주기
lstResult.Items.Add("반복문 : " + x.ToString("N0") + "\n실행시간 = " + elapseds + "Ticks, " + elapseds / 10000 + "ms\n"); // 출력하기, "N0"는 뒤에는 숫자 0 -> 세자리마다 숫자를 끊어서 표현
// recursive
watch = System.Diagnostics.Stopwatch.StartNew(); // 시간측정 시작
long y = RFactorial(f);
watch.Stop(); // 시간 측정 종료
elapseds = watch.ElapsedTicks; 단위 바꿔주기
lstResult.Items.Add("Recursive : " + y.ToString("N0") + "\n실행시간 = " + elapseds + "Ticks, " + elapseds / 10000 + "ms\n"); // 출력하기
}
- 코드 설명은 주석을 참고
- 기존의 코드 앞 뒤로 예시 코드를 작성해준다
작성이 완료된 코드는 다음과 같다
작성이 완료되었다면 ctrl + F5를 눌러 실행시킨다
'이론_전공 > 알고리즘' 카테고리의 다른 글
#A05_정렬알고리즘 (0) | 2020.09.18 |
---|---|
01_이론_알고리즘 시간복잡도_알고리즘 효율성_빅오표기법 (0) | 2020.09.13 |
#A04_하노이 탑(Tower of Honoi) (0) | 2020.09.13 |
#A03_Fibonacci 수열 (0) | 2020.09.10 |
#A01_Euclid 최대공약수 알고리즘 (0) | 2020.09.09 |