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!