我正在嘗試使用遞歸編寫0和1s的所有6位排列(即,[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 1])。我正在從Yahoo! Answers得到一個提示,我已經得到了以下內容,但它不會一路走到最後,並且有重複的條目。遞歸0s和1s遞歸
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
輸出(MATLAB)只是:
>> 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
這不是「排列」的意思:http://en.wikipedia.org/wiki/Permutation – 2011-01-29 19:54:09