Mencetak 1 hingga 1000: Melangkaui Gelung dan Syarat
Dalam bidang pengaturcaraan, kami sering bergantung pada gelung dan pernyataan bersyarat untuk berulang melalui elemen. Tetapi bagaimana jika kita mencari pendekatan yang unik, yang menentang kebijaksanaan konvensional gelung dan bersyarat? Artikel ini membentangkan teknik yang membingungkan untuk mencetak nombor dari 1 hingga 1000 tanpa menggunakan binaan ini.
Penyelesaian itu memanfaatkan interaksi pintar rekursi fungsi dan aritmetik penunjuk. Pertimbangkan kod berikut dalam C:
#include <stdio.h> #include <stdlib.h> void main(int j) { printf("%d\n", j); (&&main + (&&exit - &main)*(j/1000))(j+1); }
Pada mulanya, ia mungkin kelihatan seperti kita cuba mengira alamat, tetapi keajaiban sebenar terletak pada penuding fungsi dan aritmetik penuding. Coretan pada dasarnya mencipta mekanisme panggilan fungsi rekursif, di mana fungsi seterusnya yang akan dipanggil ditentukan oleh aritmetik penuding berdasarkan nilai j.
Apabila j mencapai 1000, aritmetik penuding menilai kepada (&&keluar - & utama)*1000, yang secara berkesan menunjuk ke fungsi keluar. Keluar panggilan menamatkan program, menamatkan panggilan rekursif dan mencetak urutan yang diingini dari 1 hingga 1000.
Untuk memastikan keserasian dengan standard C, kod boleh diubah suai seperti berikut:
#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); }
Penyelesaian ini menunjukkan kuasa rekursi dan aritmetik penunjuk, menyediakan kaedah yang elegan dan tidak konvensional untuk mencetak nombor tanpa bergantung pada gelung atau bersyarat. Ia berfungsi sebagai peringatan yang menarik bahawa pemikiran kreatif boleh membawa kepada penyelesaian yang inovatif dalam dunia pengaturcaraan.
Atas ialah kandungan terperinci Bagaimana Anda Boleh Mencetak Nombor 1 hingga 1000 Tanpa Menggunakan Gelung atau Pernyataan Bersyarat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!