Ben bir şekilde (php) sayıların bir diziye bir dizi kırmaya çalışıyorum ki örneğin:
- 25 olur (16, 8, 1)
- 8 olur (8)
- 11 olur (8, 2, 1)
Ben doğru terim olduğunu bilmiyorum, ama ben fikir açık olduğunu düşünüyorum.
Bir döngü ile benim çözüm oldukça basittir:
$number = rand(0, 128);
$number_array_loop = array();
$temp_number = $number;
while ($temp_number > 0) {
$found_number = pow(2, floor(log($temp_number, 2)));
$temp_number -= $found_number;
$number_array_loop[] = $found_number;
}
Ben de bir özyinelemeli çözüm var ama global bir değişken (istemiyorum) kullanmadan işe alamazlar, aşağıdaki yakındır ama diziler diziler sonuç geliyor:
function get_numbers($rest_number) {
$found_number = pow(2, floor(log($rest_number, 2)));
if ($found_number > 0) {
$temp_array[] = get_numbers($rest_number - $found_number);
$temp_array[] = $found_number;
}
return $temp_array;
}
$number_array_recursive = array();
$number_array_recursive = get_numbers($number);
Ancak, pow(floor(log())) gibi bir şey kullanarak bu gibi basit bir sorun için biraz fazla gibi görünüyor.
Bu sorun bazı çok basit matematik ile bir özyinelemeli çözüm aramaları, ama ben sadece görmüyorum gibi geliyor bana.
Herhangi bir yardım apreciated olacaktır.
Edit: İkili çok teşekkürler tüm anahtarıdır!