Impression de 1 à 1000 sans boucle ni instructions conditionnelles
Dans le monde de la programmation, il peut être difficile d'accomplir des tâches apparemment simples sans utiliser boucle conventionnelle ou syntaxe conditionnelle. L'une de ces tâches consiste à imprimer une série de nombres de 1 à 1 000.
Compilation en assemblage sans condition
Une solution intelligente consiste à compiler un extrait de code dans des instructions d'assemblage qui manque de conditions. Considérez le code C suivant :
#include <stdio.h> #include <stdlib.h> void main(int j) { printf("%d\n", j); (&&main + (&&exit - &&main)*(j/1000))(j+1); }
Ce code utilise les opérateurs "&&" pour convertir des pointeurs de fonction et calculer un décalage basé sur le résultat de division de "j/1000". En enchaînant les appels de fonction, il imprime efficacement la séquence de nombres sans boucles ni conditions.
Une approche alternative avec des pointeurs de fonction
Une solution alternative adhère à la norme C et ne repose pas sur l'arithmétique des 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); }
Ce code utilise un tableau statique de pointeurs de fonction pour obtenir le même résultat que le exemple précédent. En sélectionnant et en appelant dynamiquement ces fonctions, cela évite l'utilisation de conditions ou de boucles.
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!