> 백엔드 개발 > C++ > 루프나 조건문 없이 1부터 1000까지의 숫자를 어떻게 인쇄할 수 있나요?

루프나 조건문 없이 1부터 1000까지의 숫자를 어떻게 인쇄할 수 있나요?

Susan Sarandon
풀어 주다: 2024-11-25 06:53:12
원래의
787명이 탐색했습니다.

How Can You Print Numbers 1 to 1000 Without Loops or Conditional Statements?

반복이나 조건 없이 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿