Kod kelabu atau kod binari yang dicerminkan ialah sejenis perwakilan perduaan nombor yang istimewa di mana dua nilai berturut-turut berbeza hanya dalam satu bit. Sebagai contoh, persamaan binari 1 dan 2 ialah 01 dan 10, di mana dua bit berubah. Tetapi dalam kod Kelabu, 1 ialah 01, 2 ialah 11, dan hanya satu bit yang berubah. Dalam artikel ini, kita akan melihat cara menukar nombor binari yang diberikan kepada kod Kelabu yang setara menggunakan rekursi dalam C++.
Dalam contoh pertama kami menyediakan nombor perpuluhan. Nombornya hanya 0 dan 1, tetapi nombornya dalam perpuluhan. Sebagai contoh, jika kita ingin lulus 6 sebagai input, kita lulus 110 (seratus sepuluh dalam perpuluhan), yang bersamaan dengan 6 dalam binari. Program ini mengembalikan output dengan cara yang sama.
#include <iostream> using namespace std; int solve( int n ) { if( n == 0 ) return 0; int last = n % 10; int second_last = (n / 10) % 10; if( (last && !second_last) || (!last && second_last) ) { return (1 + 10 * solve( n / 10 )); } return (10 * solve( n / 10 )); } int main() { cout << "Gray code for the number 2 (10) is: " << solve( 10 ) << endl; cout << "Gray code for the number 6 (110) is: " << solve( 110 ) << endl; cout << "Gray code for the number 13 (1101) is: " << solve( 1101 ) << endl; cout << "Gray code for the number 93 (1011101) is: " << solve( 1011101 ) << endl; }
Gray code for the number 2 (10) is: 11 Gray code for the number 6 (110) is: 101 Gray code for the number 13 (1101) is: 1011 Gray code for the number 93 (1011101) is: 1110011
Kod kelabu atau kod binari yang dicerminkan boleh didapati dengan menggunakan operasi XOR pada bit berturut-turut. Perkara yang sama dicapai dengan mengambil dua digit terakhir nombor yang diberikan dan apabila mereka tidak sama, panggil fungsi secara rekursif dan lulus nombor kecuali digit terakhir, hasilnya akan digabungkan dengan 1 lain dengan 0, dsb. Dan seterusnya. Dalam contoh, kami telah menyediakan input sebagai nombor perpuluhan integer dan output juga dalam format perpuluhan integer. Masalah yang sama boleh diselesaikan dengan mengambil input jenis rentetan yang boleh digunakan untuk memberikan input yang lebih besar apabila diperlukan.
Atas ialah kandungan terperinci Program C++ untuk menukar nombor binari kepada kod Kelabu menggunakan rekursi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!