Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Anda Boleh Mencetak Nombor 1 hingga 1000 Tanpa Gelung atau Pernyataan Bersyarat?

Bagaimanakah Anda Boleh Mencetak Nombor 1 hingga 1000 Tanpa Gelung atau Pernyataan Bersyarat?

Susan Sarandon
Susan Sarandonasal
2024-11-25 06:53:12767semak imbas

How Can You Print Numbers 1 to 1000 Without Loops or Conditional Statements?

Mencetak Nombor dari 1 hingga 1000 Tanpa Gelung atau Syarat

Cabaran yang dikemukakan kepada pengaturcara adalah untuk mencetak nombor dari 1 hingga 1000 tanpa menggunakan sebarang struktur gelung atau pernyataan bersyarat. Tugasan ini memerlukan pendekatan kreatif untuk mengelakkan kaedah biasa untuk melelaran melalui julat nombor.

Satu penyelesaian dalam C atau C mengeksploitasi sifat rekursif panggilan fungsi. Kod berikut memintas gelung dan syarat:

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

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

Di sini, keajaibannya terletak pada penggunaan penunjuk fungsi. Ungkapan &utama mewakili alamat fungsi utama, manakala &keluar - &utama mengira saiz fungsi dalam ingatan. Dengan mendarab (j/1000) dengan nilai ini, fungsi secara rekursif memanggil dirinya sendiri, mengalihkan lokasinya dalam ingatan dengan jumlah yang sesuai. Ini membenarkan penambahan j sebanyak 1 dan meneruskan proses pencetakan tanpa sebarang mekanisme gelung yang jelas.

Memandangkan kod asal mempunyai masalah dengan aritmetik penunjuk, versi yang dipertingkatkan dalam standard C disediakan di bawah:

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

Dalam versi ini, susunan statik penunjuk fungsi digunakan untuk mengelakkan kebimbangan aritmetik penunjuk. Fungsi utama memulakan tatasusunan dengan dua elemen: f itu sendiri untuk meneruskan rekursi dan keluar apabila nilai j akhir dicapai, menandakan tamatnya proses.

Atas ialah kandungan terperinci Bagaimanakah Anda Boleh Mencetak Nombor 1 hingga 1000 Tanpa Gelung atau Pernyataan Bersyarat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn