C언어 기초 프로그래밍 강좌 10강 - 반복 함수와 재귀 함수 (C Programming Tutorial For Beginners 2017 #10)
HTML-код
- Опубликовано: 5 фев 2025
- C언어 기초 프로그래밍 강좌 10강 - 반복 함수와 재귀 함수 (C Programming Tutorial For Beginners 2017 #10) 강의 동영상입니다. 함수 중에서 반복 함수와 재귀 함수에 대해서 이해하고 공부하는 시간을 가집니다.
숫자피라미드 사용자정의 함수 부분에서 반환값이 없는게 아닌가요?
void print(int a) 대신에 int print(int a)를 써도 실행되는 이유가 무엇인가요?
저도 궁금하네요 저는 int print를 쓰니까 반환값이 없어서 실행이 안되고
당연하게도 void print를 쓰니까 실행이 되는데,,
교수님 수업 이해안되서 동빈님 영상으로 공부합니다
안녕하세요 !감사합니다 잘 듣고 있습니다. ㅎㅎ저기 궁금한게 있는데, 마지막 조합 예제에서nCr 함수가 어떻게 최종 값을 리턴 받는 건가요?
보니까 if문 조건 맞으면 리턴 1이고, else 일때는 nCr(n-1,r-1) + nCr(n-1,r) 리턴을 수행하는 것 같은데,else 식에 의해 점점 쪼개진 조합들이(n=r || r=0)을 만족하게 되서 if 문에서 리턴 1을 하는 것 까지는 알겠는데,그 1이된 값들이 어떻게 합해져서 최종 리턴을 받게되는 건가요??----------------------------------------------(확인해보니, 정확하게 궁금한 것은,1. 어떻게 재귀함수에 for문과 while문을 쓰지 않았는데, if문으로 반복 구문 실행할 수 있는 것인지 궁금합니다.2. 그리고 최종 함수의 연산된 값이 어떻게 if & else 구문을 탈출하여 값을 리턴할 수 있는지 궁금합니다.!!고수님들 도와주세요 !!
1.if문과 else문으로 사용자 함수 nCr을 정의했잖아요?
그런데 else문에 있는 사용자 함수 nCr이 nCr의 if문으로 돌아가게 되어 반복하게 되는 것입니다.
ex) 3 2 enter
nCr(3, 2) = nCr(2, 1) + nCr(2, 2)
nCr(2, 1) = nCr(1, 0) + nCr(1,1) = 2, nCr(2,2)= 1
따라서 nCr(3,2) 결과값 = 3
실질적으로 번복문인 for문과 while문을 사용하지 않았지만
재귀함수를 이용해서 반복하게 한것입니다.
2. 연산된 값은 if & else 구문을 탈출하지 않았습니다!
연산된 값은 else 구문 return 에 반환되어 있던 것을 printf로 통해 표기한 것 뿐입니다.
3:19 본 영상에서는 int print 함수에서 return값이 없는데 결과가 도출됩니다. 그런데 제가 해보니 오류가 뜨더군요. 프로그램의 차이인가 생각이 들어서 질문드립니다! 사용중인 프로그램은 visual studio 2019입니다.
Int print로 작성해서 그런 것 같습니다
void print로 하시면 값 없이 리턴만 작성해도 될 것 같습니다!
@Halfmoon Shape 반환형이 int인 경우에는 int형의 값이 반환(return)되어야하는데 return만 작성한 경우 반환 값이 존재하지 않아 오류가 발생하는 겁니다.
@@suhyeok
저 궁금한것이 있는데
print ()는 대체 뭐고
printf()랑 차이점이 뭔지
또 대체 매개변수가 뭔지
어떻게 쓰는건지..
void print (int count)
같은건 뭔지 모르겠어요
@@비공개네임드 print()와 printf() 일종의 내장함수입니다. 예를 들어 함수가 어플이라면 기본적으로 설치되어 있는 기본 어플 같은 것입니다. 반대로는 외장함수, 어플로 따지면 기본적으로 설치되어 있지 않은 어플입니다. 어떤 특별한 기능이 필요할 때 다운 받아 사용하는 것과 같은 이치입니다. 당연하게도 어플마다 기능이 존재하겠죠. 저 친구도 똑같다고 생각하시면 됩니다. 프로그래밍에 있어 가장 중요한 것은 검색입니다. 내장함수의 기능과 사용법은 인터넷에서 쉽게 알아볼 수 있고, 외장함수는 만든 사람이 기능과 사용법을 설명하고 있을 것입니다. 따라서 모든 코드에 대한 정보는 인터넷에 존재합니다.(직접 만든 건 제외) print()와 printf()의 기능도 직접 검색해보시는 것을 추천드립니다. 매개변수는 호출(실행) 시 선언과 전달을 동시에 하는 것이라 생각하면 쉽습니다. 지역변수(함수 내부에서만 쓸 수 있는 변수)는 함수의 내부에서 선언되는 것이지만 사람들은 그것의 값이 나중에 실행할 때 선언되길 원했고 매개변수를 만들었습니다. 즉 일종의 부품인 것입니다. 나중에 골라서 사용할 수 있게 되는 것이죠. 예를 들어 컵을 만들고 싶은데 담아야하는 액체가 무조건 물이라고 제작 과정에서 선언을 하면 그 컵에는 물 밖에 담지 못하게 되겠지만 그 부분을 사용 과정에서 정할 수 있게 한다면 다양한 액체를 담을 수 있겠죠 그런 필요에 의해 만들어졌습니다. void print (int count)는 count라는 값을 나중에 받는 반환값이 없는 print라는 함수라는 뜻이라고 볼 수 있습니다. 더 궁금한 것이 있으면 물어봐주세요. 아니면 개발자 커뮤니티에 가보시면 다들 친절하게 답변해 드립니다. 답변이 너무 늦은 건 아닌가 모르겠네요 ㅎㅎ 도움이 되셨으면 좋겠습니다.
혹시 누군가 답변을 해주실까요?
숫자피라미드 프로그램에서요..
int print (int a) ...1번 함수가
int main (void) ...2번 의 아래에 위치시키면 에러가 뜹니다.
어차피 1번함수의 내용이 2번에 끼어들어가는 구조인것 같은데 왜 꼭 1번함수가 먼저 나와야하나요??
너무너무 이해가 잘 되서 무서워요 ...........,,
반복함수는 for, while로만 구성됨. 자기함수 안에 자기가 들어간 것. 마지막꺼는 제 컴에서 구현이 안됨..
강의 항상 잘보고있습니다 감사합니다 재귀함수로 조합 구현하기 프로젝트중 문제가 생겨 댓글을 달아보아요! 코딩하고 프로그램 실행을 하는데 있어 10C5의 결과가 10으로 출력이 되는데 어떤게 문제일까요? 물론 제가 어딘가 변수 조건문 함수를 오타를 냈는지에 대해 모두 체크했지만 문제는 없었습니다. 혹은 키보드상에 nCr공식의 C에 부합되는 단축키가 따로있는건가요?????
작성한 걸 보여주심이~~
궁금한게있는데요
특정한문자열을 재귀함수 반복저거 할때
number대신에 그냥 count로 다 하면안대나여?
왜 또 int number 을만드나요?
카운트로 해도 다 되더라구용
분명 만드신 이유는 있을텐데 궁금하네요 ㅋㅋ
정주행 10강/20강
오 계시군요 지금 보시는 분
@@hgkim0929 저도 봅니다
작은보리 저는 지금 봐용
숫자 피라미드 만들기 따라해봤는데 작동이 중지되었습니다. 뜨는데 어떻게 해결해야 하나요? ㅠㅠ 이미 틀린거 확인은 다 해보았습니다.
어려운거 같으면서도 간단하네요
좋은 강좌 너무나도 감사합니다!!
동빈나 선생님~ 강의 잘 보고 있습니다. 질문이 있는데요~
int print(int a){} 함수에 대해서 return이 없는데, return을 생략할 수 있나요?
만약 생략한다면 어떤게 반환 되는건가요?
좀 늦은감이 없잖아 있지만 그 부분에서는 return문이 필요 없을 것 같습니다. return자체가 어디로 돌아가라 라는 뜻인데 for 반복문에서 조건에 충족될 때 가지 반복이 되고 종료가 되기 때문에 return 0, 즉 0으로 돌아가서 꺼지라든지 그런 의미가 필요없기 때문일것 같습니다.
확인했습니다 감사합니다!
@@태현승-q3n 꺼지라든 지ㅋㅋㅋㅋ
저 반복문에서 이해가 안되는게 있는데여
int print(int a)
{
int i, j;
for(i = 0; i < a; i++);
{
for(j = 0; j
참이 되니까 멈추면 안 되죠!
숫자 피라미드 내용 중에 print(a); 가 있는데 이건 뭐죠? printf가 아니라 print는 처음봐서요.
윗부분에 직접 만든 함수가 print(a)니까요
진짜 간결하고 쉽게 설명해주신당 고마와용
10C5 = 9C4 + 9C5 인 것도 알겠는데 이건 어디서 계산 하는건가요? 답이 나온다는건 컴퓨터가 계산을 한다는건데 아무리 봐도 저 식을 계산 할만한게 없는데 어디서 하는건가요?
맞는지는 모르겠지만 제가 이해한 방식을 설명드릴까 해요
4C2를 예로 들자면 4C2=3C1+3C2가 될거에요
먼저 3C1을 살펴보면 3C1=2C0+2C1이 되겠죠..?
그렇게 된다면 2C0은 1로 리턴될 것이고 3C1=1+2C1이 될겁니다
다시 2C1=1C0+1C1이 될테고 우변은 전부 1이 될테니
2C1=1+1이 되겠네요
그러면 우변에 있는 값이 좌변에 삽입이 되기에 2C1=2가 될것이고 다시
3C1=1+2가 되기에 3이되겠네요
3C2도 마찬가지로 계산해보시면 3이 나오고 4C2는 6이라는 결과가 나오게 되네요..!
@@백주원-s9y 네 답변 감사합니다^^
제가 궁금한건 컴퓨터가 C라는 걸 알고 있나 궁금한겁니다 저는 그냥 키보드에 있는 C를 누른건데 그걸 컴퓨터가 순열로 이해하는건지 궁금하네요..!
컴퓨터가 C라는것을 순열로 이해한것은 아니고 작성자가 nCr함수를 위와같이 정의해서 계산이 나온듯해요..!
@@백주원-s9y 아 영상 다시 보니 이해됐습니다..! 윗 댓글에 써주신 것처럼 결국 r ==0 이 되기에 다 1로 바껴서 계산이 가능한거군요 이해했습니다 답변 감사합니다!
@@백주원-s9y 이 글을 보고 이해가 됬네요 감사합니다 ㅠㅠ
숫자 피라미드에 왜 j+1이 출력되나요??
왜 10C5가 252라는 결과값으로 나오는거죠?? 9C4, 9C5라고 했을때 둘다 곱하거나 더해도 저런값이 안나오는데.. 제가 이해를 잘못한건가요??
맞는데요 계산실수하신듯
@@xxuxu5379 어떤식으로 계산해야되죠?
@@키위왕국 10c5=10x9x8x7x6/5x4x3x2x1 9c4=9x8x7x6/4x3x2x1 9c5=9x8x7x6x5/5x4x3x2x1 입니다
비쥬얼 스튜디오로 할때는 안되고 dev 할때는 되는 이거 대로 계속 배워도 되는건가요? 몇개가 자꾸 그래서 ㅠㅜ 왜그런지 설명좀 해주세요
비쥬얼 스튜디오에서는 scanf함수 scanf_s()로 쓰셔야 해요. 아니면 # define scanf scanf_s 로 하고 쓰셔도 되요.
혹시 답해주시는 분 있으실까 질문 남깁니다!
# include
void print(int count, char string) {
if(count == 0) {
return;
}
else{
printf("%c
", string);
print(count - 1, string);
}
}
int main(void) {
int count;
char string;
printf("문자열을 입력하세요: ");
scanf("%c", &string);
printf("반복횟수를 입력하세요: ");
scanf("%d", &count);
print(count, string);
return 0;
이렇게 문자열까지 입력받을 수 있도록 해봤는데 실행하면 문자열만 입력받고 바로 프로그램이 끝나버리는데...뭐가 문제인가요??
문자열을 입력받은 다음에 getchar(); 를 사용하면 해결됩니다.
nCr함수가 c언어 내에 있는거 아닙니까? nCr 수식 정의하지도 않았는데 그냥 나오네?
int print()하고 print()는 무슨 뜻인가요 ???
음 강의 한 번 더 들어보시는걸 추천드립니당. .
숫자 피라미드 프로그램을 정확하게 작성하고 F11을 눌러서 실행을 했는데 '원하는 숫자'를 적고 ENTER를 누르면 프로그램이 작동이 안된데요....어떻게 하죠?
좋은 강좌 감사합니다,, 너무 빨라서 잘 못듣겠어요 ㅎㅋㅋㅋㅋㅋㅋㅋ ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ
a는 또 왜 튀어나온 거죠? ㅜㅜ
제일 중요한 함수 사용방법....이거 모르면 로봇 알고리즘 짜기 귀찮아집니다.
님들 질문이 있는데
#include
int print(int a){
int i,j=0;
for (i=0; i
근데 왜 i 와 j 라고 하는거에요?? 임의로 정한건가요????
코딩에서 변수는 대수학에서와 마찬가지로 x, y나 a, b가 많이 쓰이구요. i와 j같은 경우는 배열의 인덱스(index)의 앞글자를 따면 i가 됩니다. x, y, z처럼 알파벳 순으로 한 칸씩 증가시키는 규칙과 동일하게 i, j, k 순으로 사용한다고 기억하시면 좋을 것 같습니다.
정말 이해가 안가는데 왜 nCr = nCr(n-1, r-1) + nCr(n-1, r) 이 어떻게 계산이 되는거죠ㅠㅜ 2시간을 찾아보앗지만 잘모르겟네요ㅠ nCr이라는 함수인가요ㅠㅜㅜ 누가 제발 알려주세요... 원리를 ㅠㅜㅠ
nCr(n-1, r-1)이 n 대신에 n-1을 넣고 r 대신에 r-1을 넣는다는 말 같습니다. 따라서 10C5 = 9C4 + 9C5라고 볼 수 있겠네요
근데 나도 이해 안되네요 10C5 = 9C4 + 9C5라는 것도 아는데 이걸 어디서 계산 하는건가요 계산 하는 게 없는데
그냥 어떤수열에서 숫자 몇개를 뽑는데 그 뽑을 경우의 수라고 보시면 되요
어떤 nCr 값이 r == n 이 되는 nCr과 r == 0 이 되는 nCr으로 계속 나누어지면서 결국엔 r == n이 되는 nCr 개수와 r == 0이 되는 개수의 합을 구하게됨.
한마디로 이렇게 표현하면 되나요?
여기서부터 갑자기 어려워짐 ㅜㅜ
201106 복습
나동빈쌤 질문이 있는데요
숫자피라미드를 만들때 int print 함수에
return 값을 안 정했는데도 정상작동하는 이유가 뭐죠?
저는 리턴값을 안정하니까 안되네요....
3:14
님들
#include
int print(int a)
{
int i,j;
for(i=0; i
오젓다리
이제 어려워서 떨어져 나간 사람이 많네요... 조회수 보니까....ㄷㄷ