, 당신은 그것을 어떻게 할 것인가? I는 다음과 같이 가정합니다 :
void getss(int array[], int size) {
int i;
for (i = 0; i < size; i++) {
scanf("%d", array[i]);
}
}
우리 i
가 단지 우리가 약간 우리는 그것을 제거 할 수 있습니다 우리의 기능을 변경, 그래서 만약 배열을 통해 우리의 길을 계산하는 역할을한다 : 이제
void getss(int* array, int size) {
for (; size > 0; size--, array++) {
scanf("%d", array);
}
}
우리 "counter"는 크기 변수 자체이며 배열에서 인덱싱하는 대신 우리는 포인터를 앞으로 계속 나아 간다.
이제는 재귀 함수로 변환하기에 완벽한 형태입니다.
void getss(int* array, int size) {
if (size > 0) {
scanf("%d", array);
getss(array + 1, size - 1);
}
}
그래서 우리 루프의 종료 조건은 우리가 array+1
전달 if
대신의 array++
및 size--
로 이동
대신
size--
및
array++
의 우리는 함수의 끝에서
getss
에 다른 통화에 새 값을 전달할 수 있습니다 다음 번에
size-1
으로 전화하십시오. 루핑과 동일한 결과를 얻지 만 명시 적 루프 구조는 없습니다.
어떻게 작동하지 않습니까? 실패한 곳은 어디입니까? – sarnold
다른 사람들을위한 배경 정보 : http://stackoverflow.com/q/8623471/377270 - 예, 이것은 거의 중복되었지만, 시작한 곳에서 질문을 얼마나 "마이그레이션해야합니까?" 지금까지 나에게 잘 됐네 ... – sarnold
'i'가 선언되지 않았기 때문에 작동하지 않습니다. 아마 '크기'여야합니다. 그러나 그때조차도,'array [0]'은 절대로 쓰여지지 않습니다. – Jens