Ni jedao od ova tri resenja nije ispravno.
Prva dva ne postuju broj argumenata u funkciji koji treba da bude 1(verovatno je to poenta ovog zadatka).
Treci nece moci da radi sa brojem 0 i 1, posto te cifre ne treba da se menjaju u slova, vec samo prenesu, sto sa tim algoritmom nece moci.
Fora je da kada pozivas rekurziju sa samo tim jednim argumentom, da taj string praznis sa leve strane, a istovremeno i punis sa desne zamenjenim slovima. Izmedju njih se stavi neki separator naprimer blanko ili tacka.Kada je prvi karakter bas taj separator ti ispises kombinaciju.
Code:
procedure rekurzija(Broj:String);
const
Cifra='000111abcdefghijklmnoprstuvwxy';
var
c:Integer;
begin
if pos(' ', broj)=1 then
showmessage(Broj)
else
begin
if pos(' ', Broj)=0 then
broj:=Broj+' ';
c:=strtoint(copy(broj,1,1));
broj:= copy(Broj, 2, Length(Broj)-1);
rekurzija(Broj+cifra[c*3+1]);
rekurzija(Broj+cifra[c*3+2]);
rekurzija(Broj+cifra[c*3+3]);
end;
end;
Eh da, u paskalu ako hoces da pristupis odredjenom karakteru u stringu, onda pocinjes od npr. Cifra[1] a ne Cifra[0] kao napr. u c-u, jer je Cifra[0] duzina stringa, pa prema tome za c treba prepraviti cifra[c*3+1]..[c*3+3] sa cifra[c*3+0] redom do [c*3+2].
Pozdrav