Dvojisko
* preverimo, če je število enako ali manjše od 0 ==> če je pogoj izpolnjen se izpiše prazen niz sicer
* delimo število z dva in preverimo, če rezultat deljenja ustreza pogoju enako ali manjše od 0 ==> če je pogoj izpolnjen se izpiše prazen niz
* ponavljamo, dokler rezultat deljenja ne ustreza pogoju enako ali manjše od 0 ==>izpiše se prazen niz
* izračuna se ostanek pri deljenju pri zadnjem klicu metode in izpiše kot niz
* izračuna se ostanek pri deljenju pri predzadnjem klicu metode in izpiše kot niz
* Ponavljanje do prvega klica metode, kjer se izračuna ostanek pri deljenju pri prvem klicu metode in izpiše kot niz.
Metoda kliče samo sebe ==>rekurzivna metoda.
Primer za n = 23
pokliče se metoda deliDva(23) – rezultata metode se ne dobi neposredno,
*ker 23 ni enako ali manjše od 0 – izvede se else
pokliče se metoda deliDva(11) – rezultata metode se ne dobi neposredno,
*ker 11 ni enako ali manjše od 0 – izvede se else
pokliče se metoda deliDva(5) – rezultata metode se ne dobi neposredno,
*ker 5 ni enako ali manjše od 0 – izvede se else
pokliče se metoda deliDva(2) – rezultata metode se ne dobi neposredno,
*ker 2 ni enako ali manjše od 0 – izvede se else
pokliče se metoda deliDva(1)
*0 je enako ali manjše od 0 – pogoj je izpolnjen
*Return "" (rezultat zadnjega klica metode je prazen niz)
dogajanje pri nadaljnjih klicih metod, od predzadnjega klica proti prvemu
*Return "1" (n = 1/2 = 0; ostane 1)
*Return "0" (n = 2/2 = 1; ostane 0)
*Return "1" (n = 5/2 = 2; ostane 1)
*Return "1" (n = 11/2 = 5; ostane 1)
*Return "1"(n = 23/2 = 11; ostane 1)
*Metoda vrne niz "10111" (končen rezultat).
import javax.swing.*;
public class pretvoriDvoj {
/* Če je število n10 negativno ali enako nič metoda vrne prazen niz
sicer deli n10 z 2 in klice samo sebe, dokler ni n10 enak 0.
Vrne ostanek pri deljenju pri zadnjem klicu in po
vrsti do ostanka deljenja pri prvem klicu. */
public static String deliPisiOstanke(int n10) {
if (n10 <= 0) { // ustavitveni pogoj - metoda ustavi klicanje same sebe,
// če je n10 enak ali manjši kot 0
return ""; // vrne prazen niz
} else {
return "" + deliPisiOstanke(n10/2) + n10 % 2; // metoda kliče samo sebe
}
}
public static void main(String[] arg) {
int desetiskoStevilo;
String pod = "";
pod = JOptionPane.showInputDialog("Vnesi število: ");
desetiskoStevilo = Integer.parseInt(pod);
String dvojiskoStevilo = "" + deliPisiOstanke(desetiskoStevilo);
// izpis niza
JOptionPane.showMessageDialog(null, "" + desetiskoStevilo + " (desetiško) = "
+ dvojiskoStevilo + " dvojiško.");
}
}