못정함
C언어) 7-2장: 여러 가지 함수 유형 본문
함수 원형) 반환형 함수명(매개변수)
언제나 함수에 반한형과 매개변수가 있는 건 아님 -> 매개변수가 없을 경우에는 void를 사용
*그래서 main(void) 인가보다
<매개변수가 없는 함수>
-함수 실행 시 input을 받을 때 활용
#include <stdio.h>
int get_num(void);
int main(void){
int result;
result = get_num(); //함수 호출하고, 반환값을 result에 저장
printf("return : %d\n", result);
return 0;
}
int get_num(void) //매개변수 없음 (void)써주면 됨
{
int num;
printf("input positive number: ");
scanf("%d", &num);
return num;
}
*void는 함수 정의나 선언에서 사용되며 호출할 땐 사용하지 않음
그냥 괄호 비워두면됨. result = get_num() 이렇게 호출함
<반환값이 없는 함수>
-데이터를 받아서 단지 화면에 출력하는 함수
-반환형의 자리에 void를 사용함
#include <stdio.h>
void print_char(char ch, int count); //반환값 없는 함수 선언
int main(void){
print_char('@', 5); //함수 호출
return 0;
}
void print_char(char ch, int count)
{
int i;
for (i=0; i < count; i++)
{
printf("%c", ch);
}
return;
}
*return; 으로 쓰면 됨 (반환값 없이 단독으로 사용 / return 생략해도 되긴함)
+)
함수 실행 중간에 함수 실행을 끝내고 싶으면 return;을 사용하면 도미
void print_char(char ch, int count)
{
int i;
if (count > 10) return; // 여기서 return하면 함수의 실행을 종료함. 10보다 크면 함수 종료
for (i=0; i < count; i++)
{
printf("%c", ch);
}
return;
}
<매개변수와 반환값이 모두 없는 함수>
ex) 일정한 문자열을 여러 번 출력하는 함수
-매개변수와 반환형에 모두 void를 씀
#include <stdio.h>
void print_line(void);
int main(void)
{
print_line(); // 함수 호출
printf("studentID name major grade\n");
print_line();
return 0;
}
void print_line(void)
{
int i;
for (i=0; i < 50; i++)
{
printf("-");
}
printf("\n");
}
<재귀호출 함수>
-recursive call function. 자기 자신을 호출함
-함수 안에 재귀함수를 멈추는 조건을 넣어줘야함 (아니면 무한증식함)
#include <stdio.h>
void fruit(void);
int main(void)
{
fruit();
return 0;
}
void fruit(void)
{
printf("apple\n");
fruit(); //자기 자신을 다시 호출
/*반환 전에 자신을 호출하므로 처음부터 다시 시작하고 계속 apple 출력함*/
}
정상적으로 종료하려면 반복 고리를 끊어줘야함
#include <stdio.h>
void fruit(int count);
int main(void)
{
fruit(1); //처음 호출하므로 1을 인수로 준다
return 0;
}
void fruit(int count)
{
printf("apple\n");
if (count ==3)
{
return;
}
fruit(count + 1); //재호출 할 때 호출 횟수를 1 증가
}
<재귀호출과 반복문의 차이점>
*재귀함수는 직전에 호출한 곳으로 돌아간다
: 이전 함수의 호출 위치로 return => printf("jam\n"); 실행 (count=2의 함수) => 이전함수의 (count=1시절의 함수) printf("jam\n")실행 => 끝
(재귀함수는 실행 시 함수의 복사본을 만들어서 실행함. 계속 직전 호출한 곳으로 거슬러 올라감 (???)0
이해 안되면 교재 230p의 그림 참고하기
#include <stdio.h>
void fruit(int count);
int main(void)
{
fruit(1); //처음 호출하므로 1을 인수로 준다
return 0;
}
void fruit(int count)
{
printf("apple\n");
if (count ==3)
{
return;
}
fruit(count + 1); //재호출 할 때 호출 횟수를 1 증가
printf("jam\n");
}
printf("jam\n"); 추가하면
결과가)
apple
apple
apple
jam
jam
이렇게 나옴.
재귀함수는 함수의 복사본을 만들어 실행한다고 생각하면 이해하기 쉬움.
===> 복잡하다..메모리도 많이 잡아먹는다...쓰지말자...
'C언어 공부 > C언어 독학 (교재)' 카테고리의 다른 글
C언어) 9-1 포인터의 개념 (0) | 2024.10.09 |
---|---|
C언어) 8-2장: 문자를 저장하는 배열 (1) | 2024.09.16 |
C언어) 7-1장: 함수의 작성과 사용 (0) | 2024.09.15 |
C언어) 6장: 반복문 (0) | 2024.09.15 |
C언어) 5장 선택문 (if문, switch ~ case문) (1) | 2024.09.15 |