Witam
Mam problem z pewną rekurencyjna funkcją.
Ogólnie zadaniem kodu jest wyszukanie rozwiązania (sumy) dającą zadaną liczbę z podanego zbioru.
Jeśli znajdzie taką kombinację to zwraca mi te liczy, które składają się na sumę i kończy szukanie kolejnych kombinacji.
Teraz chciałem wywołać ją ponownie, ale najpierw usuwam te rekordy z tablicy, które zostały użyte i mam problem z błędami notice.
Gdy wywalę kod 77 - 81 to wszystko jest ok, ale wtedy będzie brał mi pod uwagę te same wartości a tego nie chce.
Wynikiem działania poniższego kodu jest:
Notice: Undefined variable: result in C:\xampp\htdocs\konkurs\index11.php on line 39
3,
Notice: Undefined variable: result in C:\xampp\htdocs\konkurs\index11.php on line 39
Notice: Undefined offset: 2 in C:\xampp\htdocs\konkurs\index11.php on line 26
Notice: Undefined offset: 4 in C:\xampp\htdocs\konkurs\index11.php on line 26
4,
Wygląda to jak by php pamiętał pierwszą zadaną tablicę i miał gdzieś, że w kolejnym wywołaniu podaję mu już inną tablicę.
Macie pomysł jak to rozwiązać?
<?php
function combine($array, $val, $from = 0)
{
for($i = $from;$i < $cnt;$i++) {
if($level < $val ) {
$result[] = $array[$i];
$from++;
$level++;
$results = array_merge($results, combine
($array, $val, $from)); $level--;
}
else {
$result[] = $array[$i];
$results[] = $result;
}
}
return $results;
}
function search ($strings, $need)
{
$strings_count = count($strings); for ($i = 1; $i <= $strings_count; $i++)
{
if ($need == $result)
break;
$combination = combine($strings, $i, 0);
foreach ($combination as $tab)
{
$result = 0;
foreach ($tab as $all)
{
$result += $all;
$orders[] = $all;
}
if ($need == $result)
{
return $orders;
break;
}
}
}
return NULL;
}
$result = 3989;
$orders = array(1
,2
,3
,4
,5
,6
,7
);
$wynikowa_tab = search ( $orders, 3);
if ($wynikowa_tab != NULL)
{
foreach ($wynikowa_tab as $tab)
{
}
}
unset($orders[$key_del]);
unset($orders[$key_del]);
$wynikowa_tab = search ( $orders, 4);
if ($wynikowa_tab != NULL)
{
foreach ($wynikowa_tab as $tab)
{
}
}
?>