Maison >développement back-end >C++ >Comment pouvez-vous imprimer les nombres de 1 à 1000 sans utiliser de boucles ou d'instructions conditionnelles ?
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 - &main)*(j/1000))(j+1); }
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); }
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!