Domanda

Sto facendo un corso C. Ho bisogno di fare un binario XOR ricorsivo ma ho alcune limitazioni. Non riesco a usare loop o alcuna funzione math.h, né posso chiamare un'altra funzione dalla funzione XOR.

Questo è il prototipo della funzione:

int binaryXor(int firstnumber[], int secondnumber[], int length);

dove firstnumber e secondnumber sono array con la stessa lunghezza di 1s e 0s e la lunghezza è la loro lunghezza.

La funzione dovrebbe restituire il valore decimale dell'XOR di questi due array. Fare XOR è abbastanza semplice, ma come posso convertirlo in decimale con tutte le limitazioni?

È stato utile?

Soluzione

Questa è una domanda ricorsiva standard. Il trucco è rendersi conto che il valore intero di una stringa di 1 e 0 seguito da un 1 o 0, è 2 * il valore intero della stringa più il valore della cifra.

Quindi vorrai fare qualcosa del genere

if( length <= 0) return 0;

return 2 * binaryXOR(firstnumber, secondnumber, length - 1) + (firstnumber[length - 1] ^ secondnumber[length - 1]);

Altri suggerimenti

Per scrivere una funzione ricorsiva, senza loop, devi rispondere alla seguente domanda:

" Come posso esprimere la risposta al mio problema in termini di un problema minore? "

In questo caso, il problema è che hai length cifre da guardare, ma non ti è consentito eseguire il loop. Quindi, come si esprime un xor di dimensione lunghezza in termini di un xor più piccolo, insieme a una quantità di lavoro che non richiede un ciclo?

[Modifica: resisti, ho appena esaminato di nuovo la tua domanda, e dici che hai già il xor ordinato, quindi suppongo che tu l'abbia già fatto. In tal caso il mio commento sopra è l'unica cosa che devi sapere: hai finito. Un int in C non è un valore decimale, è solo un valore. Non è necessario convertire nulla in decimale per archiviarlo o restituirlo in un int .

Se sei interessato, però, posso pubblicare codice che converte un int in un valore decimale usando una funzione ricorsiva. Un modo semplice è di elaborare la strada "giù". quante cifre sono necessarie, confrontando con potenze sempre più grandi di 10, e poi sulla via del ritorno "in alto"; stampa le cifre a partire dalla fine.]

Una chiamata di funzione ricorsiva può essere utilizzata al posto di un ciclo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top