@OlegVassilkov

Прибавление предыдущего числа к следующему php?

Написал вот такой код:
<?php 
    function nums_from($n=1, $i=0) {
	if ($n > $i){
	    nums($n + $i);
	}

}
echo ($n).' ' ;


Должен быть результат: 1.3.5.7. и.т.д т.е прибавляться предыдущее число, рекурсия, что не так с кодом?
  • Вопрос задан
  • 869 просмотров
Пригласить эксперта
Ответы на вопрос 3
@dmitryKovalskiy
программист средней руки
Я извиняюсь, но вчера один персонаж 3 раза задавал разные вопросы по рекурсии с правками кода функции nums_from. 1) Отправлю жалобу на задание, не обижайтесь. 2) Передайте вашему преподавателю что он дебил. Рекурсия - инструмент специфический. Если задача коротко и прозрачно решается итеративно - решать ее рекурсией будет только имбецил. Задачи решают рекурсией, если итеративно код выглядит как ночной кошмар (обход деревьев, xml, ханойская башня).
Ответ написан
littleguga
@littleguga
Не стыдно не знать, а стыдно не интересоваться.
Выполняется это условие один раз. Вам нужно делать это в цикле.
Как вариант:
function nums_from($n=1, $count = 10) {
    $i = 0;
    while($i < $count){
        $n = $n + $n;
        echo $n;
        $i++;
    }
}
Ответ написан
Комментировать
BaZProduction
@BaZProduction
Проблема в том, что ты делаешь echo ($n).' ' вне функции.
Правильнее было бы сделать так:
function nums_from($n=1, $i=0) {
  if ($n > $i){
      echo ($n).' ' ;
      nums($n + $i);
  }
}
nums_from();


Но в таком варианте функция никогда не выйдет из рекурсии.
Возможный вариант решения:
function nums_from($count =1, $n=1, $i=0) { // здесь $count это сколько раз должна выполнится функция
  if ($count--){ // проверяем на истинность(не 0), и сразу уменьшаем значение
      echo ($n).' ' ;
      nums($count, $n + $i);
  }
}
nums_from(10); // функция выполнится 10 раз
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы