2010-04-22 3 views
1

Я хочу найти первый набор целых чисел в массиве X, чтобы сумма равнялась заданному числу N.
Например:Найти числа, равные сумме в массиве

 
X = {5, 13, 24, 9, 3, 3} 
N = 28 
Solution = {13, 9, 3, 3} 

Вот что я до сих пор: ВНИМАНИЕ, я знаю, он использует глобальные и это плохо, это не точка вопроса.

<?php 

function s($index = 0, $total = 0, $solution = '') 
{ 
    global $numbers; 
    global $sum; 

    echo $index; 

    if($total == 28) 
    { 
     echo '<br/>'.$solution.' = '.$sum.'<br/>'; 
    } 
    elseif($index < count($numbers) && $total != 28) 
    { 
     s($index + 1, $total, $solution); 
     s($index + 1, $total + $numbers[$index], $solution.' '.$numbers[$index]); 
    } 
} 

$numbers = array(5, 13, 24, 9, 3, 3); 
$sum = 28; 

s(); 

?> 

Я не понимаю, как я могу остановить этот процесс, когда он находит решение .. Я знаю, что я не далек от хорошего решения ..

Заранее спасибо

ответ

3

Если ваш вопрос лишь в том, как выйти из рекурсии, есть функция возвращает логическое значение для, если он найден матч или нет:

function s($index = 0, $total = 0, $solution = '') 
{ 
    global $numbers; 
    global $sum; 

    echo $index; 

    if($total == 28) 
    { 
     echo '<br/>'.$solution.' = '.$sum.'<br/>'; 
     return true; 
    } 
    elseif($index < count($numbers)) 
    { 
     return s($index + 1, $total, $solution) or s($index + 1, $total + $numbers[$index], $solution.' '.$numbers[$index]); 
    } 

    return false; 
} 

(я ушел из второй части вашего еще поскольку он избыточен)

+0

Это казалось слишком очевидным. – zmbush

+0

Вау, я, должно быть, устал .. спасибо. –

Смежные вопросы