Maison >développement back-end >C++ >Comment les nombres peuvent-ils être imprimés séquentiellement de 1 à 1000 sans boucles ni instructions conditionnelles en C ?

Comment les nombres peuvent-ils être imprimés séquentiellement de 1 à 1000 sans boucles ni instructions conditionnelles en C ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-26 17:37:10308parcourir

How Can Numbers Be Printed Sequentially from 1 to 1000 Without Loops or Conditional Statements in C?

Résoudre l'énigme de l'impression de nombres sans boucles ni conditions

Le défi de l'impression séquentielle de nombres de 1 à 1000 sans recourir à une boucle ou à des conditions constructs intrigue les programmeurs avec son approche non conventionnelle. Comment une tâche aussi simple en apparence peut-elle être accomplie sans les outils fondamentaux de programmation ?

Déverrouiller la solution en C

La solution, comme le démontre l'extrait de code C ci-dessous , consiste à exploiter l'arithmétique et la récursivité des pointeurs.

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

void main(int j) {
  printf("%d\n", j);
  (&&main + (&exit - &main)*(j/1000))(j+1);
}

Ce code utilise ingénieusement les pointeurs de fonction et la récursivité. pour éviter le besoin de boucles ou de conditions. Il calcule l'adresse du prochain appel récursif sur la base du rapport j/1000. En manipulant soigneusement l'adresse de la fonction principale, le programme simule efficacement un "saut" au numéro suivant dans la séquence.

Une variante en C standard

Pour Pour ceux qui préfèrent une approche C plus standard, le code suivant élimine le recours à l'arithmétique sur les pointeurs de fonction :

#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);
}

Ces deux Des extraits de code C démontrent la possibilité d'imprimer des nombres de manière séquentielle sans boucles ni conditions. Ils mettent en valeur le pouvoir de la manipulation des pointeurs de fonction et de la récursivité pour surmonter la restriction apparemment insurmontable.

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!

Déclaration:
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