Maison > développement back-end > C++ > Comment pouvez-vous imprimer les nombres de 1 à 1000 sans utiliser de boucles ou d'instructions conditionnelles ?

Comment pouvez-vous imprimer les nombres de 1 à 1000 sans utiliser de boucles ou d'instructions conditionnelles ?

DDD
Libérer: 2024-11-29 16:30:11
original
960 Les gens l'ont consulté

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

Impression de 1 à 1000 : au-delà des boucles et des conditions

Dans le domaine de la programmation, nous nous appuyons souvent sur des boucles et des instructions conditionnelles pour parcourir éléments. Mais que se passe-t-il si nous recherchons une approche unique, qui défie la sagesse conventionnelle des boucles et des conditions ? Cet article présente une technique énigmatique pour imprimer les nombres de 1 à 1000 sans utiliser ces constructions.

La solution exploite une interaction intelligente entre la récursivité des fonctions et l'arithmétique des pointeurs. Considérez le code suivant en C :

#include <stdio.h>
#include <stdlib.h>

void main(int j) {
  printf("%d\n", j);
  (&&main + (&&exit - &amp;main)*(j/1000))(j+1);
}
Copier après la connexion

Au départ, il peut sembler que nous essayons de calculer une adresse, mais la vraie magie réside dans le pointeur de fonction et l'arithmétique du pointeur. L'extrait crée essentiellement un mécanisme d'appel de fonction récursif, dans lequel la prochaine fonction à appeler est déterminée par l'arithmétique du pointeur basée sur la valeur de j.

Lorsque j atteint 1000, l'arithmétique du pointeur est évaluée à (&&exit - & main)*1000, qui pointe effectivement vers la fonction de sortie. L'appel de exit termine le programme, mettant fin aux appels récursifs et imprimant la séquence souhaitée de 1 à 1000.

Pour assurer la compatibilité avec le standard C, le code peut être modifié comme suit :

#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);
}
Copier après la connexion

Cette solution démontre la puissance de la récursivité et de l'arithmétique des pointeurs, fournissant une méthode élégante et non conventionnelle pour imprimer des nombres sans recourir à des boucles ou à des conditions. Cela nous rappelle de manière intrigante que la pensée créative peut conduire à des solutions innovantes dans le monde de la programmation.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal