- 문제를 해결하기 위해 정해진 진행절차나 방법
- 컴퓨터에서 알고리즘은 어떠한 행동을 하기 위해서 만들어진 프로그램 명령어의 집합
- 입력 : 알고리즘은 0개 이상의 입력을 가져야 함
- 출력 : 알고리즘은 최소 1개 이상의 결과를 가져야 함
- 명확성 : 수행 과정은 모호하지 않고 정확한 수단을 제공해야 함
- 유한성 : 수행 과정은 무한하지 않고 유한한 작업 이후에 정지해야 함
- 효과성 : 모든 과정은 명백하게 실행 가능해야 함
static void Main(string[] args)
{
<의사코드> -> 인간의 언어로 흐름도를 먼저 그려보는것
// 가장 큰 수를 찾기
int[] array = { 1, 2, 3, 4, 5 };
// 1. 가장 큰 수를 저장할 변수 만들기
int max;
// 2. 맨 처음부터 시작
int index = 0;
// 3. 맨 처음부터 시작한 수가 다음 수보다 작으면 큰 수를 다음수로 변경
// 4. 다음 수를 또 다시 반복
}
- 어떠한 것을 정의할 때 자기 자신을 참조 하는것
- 함수를 정의할 때 자기자신을 이용하여 표현하는 방법
- 함수내용 중 자기자신함수를 다시 호출해야함
- 종료조건이 있어야 함
###<재귀함수 장점>
- 코드로 표현하기 어려운 경우도 직관적이고, 처리가 가능
- 분할정복을 통한 반절 계산이 가능해서 효율이 높아지게 구현이 가능
Factorial : 정수를 1이 될 때까지 차감하며 곱한 값
x! = x * (x-1)!;
1! = 1;
ex) 5! = 5 * 4!
= 5 * 4 * 3!
= 5 * 4 * 3 * 2!
= 5 * 4 * 3 * 2 * 1!
= 5 * 4 * 3 * 2 * 1
재귀함수는 예외 처리가 안되면(종료 조건) -> 오버플로우에 빠짐 (터짐)
int Factorial(int x)
{
if (x == 1)
return 1;
else
return x * Factorial(x - 1);
}
public class Folder
{
//public List<string> files;
public List<Folder> children;
}
public static void RemoveFolder(Folder folder)
{
// 파일들 삭제하고
foreach (var child in folder.children)
{
RemoveFolder(child);
}
}
int Fibonaachi(int n) // 재귀를 써도 최악의 알고리즘. -> 소모되는 시간 2배
{
if(n==1) return 1;
else if(n==2) return 1;
return Fibonaachi(n - 1) + Fibonaachi(n - 2);
}
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
}