I am trying to write all the 6-bit permutations of 0s and 1s using recursion (i.e., [0 0 0 0 0 1], [0 0 0 0 1 0], [0 0 0 0 1 1], [0 0 0 1 0 0], ... [1 1 1 1 1 1]). I'm following a tip I got from Yahoo! Answers I've got the following but it just doesn't go all the way to the end and there are duplicate entries.
function [c] = myIEEEBaby_all_decimals(h, n)
% n: number of characters more to add
if n == 0
converter(h);
return
end
in1 = [h 1];
in2 = [h 0];
converter(in1);
converter(in2);
if length(h) < n
myIEEEBaby_all_decimals([in1], n-1)
myIEEEBaby_all_decimals([in2], n-1)
end
end
function [d] = converter(IEEE)
% convert custom IEEE representation to decimal
IEEE = [zeros(1,6-length(IEEE)), IEEE];
s = IEEE(1);
characteristic = IEEE([2,3]);
k = find(fliplr(characteristic)) - 1;
c = sum(2.^k);
fraction = IEEE([4:6]);
f = sum(2.^-(find(fliplr(fraction))));
d = (-1)^s*2^(c-1)*(1+f);
disp([num2str(IEEE),' : ', num2str(d)]);
end
The output (MATLAB) is just:
>> myIEEEBaby_all_decimals([],6)
0 0 0 0 0 1 : 0.75
0 0 0 0 0 0 : 0.5
0 0 0 0 1 1 : 0.875
0 0 0 0 1 0 : 0.625
0 0 0 1 1 1 : 0.9375
0 0 0 1 1 0 : 0.6875
0 0 1 1 1 1 : 1.875
0 0 1 1 1 0 : 1.375
0 0 1 1 0 1 : 1.625
0 0 1 1 0 0 : 1.125
0 0 0 1 0 1 : 0.8125
0 0 0 1 0 0 : 0.5625
0 0 1 0 1 1 : 1.75
0 0 1 0 1 0 : 1.25
0 0 1 0 0 1 : 1.5
0 0 1 0 0 0 : 1
0 0 0 0 0 1 : 0.75
0 0 0 0 0 0 : 0.5
0 0 0 0 1 1 : 0.875
0 0 0 0 1 0 : 0.625
0 0 0 1 1 1 : 0.9375
0 0 0 1 1 0 : 0.6875
0 0 0 1 0 1 : 0.8125
0 0 0 1 0 0 : 0.5625
0 0 0 0 0 1 : 0.75
0 0 0 0 0 0 : 0.5
0 0 0 0 1 1 : 0.875
0 0 0 0 1 0 : 0.625
0 0 0 0 0 1 : 0.75
0 0 0 0 0 0 : 0.5