반복이나 조건 없이 1부터 1000까지의 숫자 인쇄
프로그래머에게 어려운 과제는 어떤 조건도 사용하지 않고 1에서 1000까지의 숫자를 인쇄하는 것입니다. 루프 구조 또는 조건문. 이 작업에는 다양한 숫자를 반복하는 일반적인 방법을 피하기 위한 창의적인 접근 방식이 필요합니다.
C 또는 C의 한 솔루션은 함수 호출의 재귀적 특성을 활용합니다. 다음 코드는 루프와 조건문을 우회합니다.
#include <stdio.h> #include <stdlib.h> void main(int j) { printf("%d\n", j); (&&main + (&exit - &main)*(j/1000))(j+1); }
여기서 마법은 함수 포인터를 사용하는 데 있습니다. &main 표현식은 메인 함수의 주소를 나타내는 반면, &exit - &main은 메모리에 있는 함수의 크기를 계산합니다. (j/1000)에 이 값을 곱하면 함수가 자신을 재귀적으로 호출하여 메모리 내 위치를 적절한 양만큼 이동합니다. 이를 통해 j를 1씩 증가시키고 명시적인 루프 메커니즘 없이 인쇄 프로세스를 계속할 수 있습니다.
원본 코드에 포인터 연산 문제가 있으므로 표준 C의 개선된 버전이 아래에 제공됩니다.
#include <stdio.h> #include <stdlib.h> void f(int j) { static void (*const ft[2])(int) = { f, exit }; printf("%d\n", j); ft[j/1000](j + 1); } int main(int argc, char *argv[]) { f(1); }
이 버전에서는 포인터 산술 문제를 피하기 위해 함수 포인터의 정적 배열이 활용됩니다. 주요 함수는 두 가지 요소로 배열을 초기화합니다. f 자체는 재귀를 계속하고 최종 j 값에 도달하면 프로세스 종료를 알리는 종료를 나타냅니다.
위 내용은 루프나 조건문 없이 1부터 1000까지의 숫자를 어떻게 인쇄할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!