Кто-нибудь может мне помочь изобразить этот код PHP построчно: functions & amp; рекурсии

function f2($n, $a)
{
if ($n == 0)
return 0;
return $a + f2($n-1, $a); // Changed return a... to return $a...
}

echo f2(3,4);

это выводит 12, я просто не понимаю, почему. Вот что я думаю, хотя:

очевидно, $ n и $ a — это переменные, которые будут заменять значения. так как n равно 3 и а 4 в этом примере. базовый случай — это оператор if, и он действует как петля между n. так как n равно 3, а n равно 0, код повторяется 3 раза.

теперь я не получаю возврат a + f2 (n-1, a). очевидно, здесь вычисляется математика, но как?

это выглядит так, я думаю:

4 + f2(2, 4)
4 + f2(1, 4)
4 + f2(0, 4)

но что это добавляет, чтобы сделать сумму 12 ??

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

2

Решение

первый звонок f2(3,4)

f2(3,4)
|
return 4 + f(2,4)
|
return 4 + f(1,4)
|
return 4 + f(0, 4)
|
return 0; // and now unwinding the stack, 0 gets passed to the prev. return called.
|
return 4 +     0   // 4 gets passed to the prev. return called
|
return 4 + 4 + 0         // 8 gets passed to the prev. return called.
|
return 4 + 4 + 4 + 0    // f2(3,4) now returns a value of 12

Глядя на стек вызовов выше, первый вызванный возврат будет:

return 4 + 4 + 4 + 0

return a + call f2 , + оператор цепочки a со следующим вызовом функции, который в конце накапливает все ваши промежуточные значения в первом return называется.

5

Другие решения

Я хотел бы добавить следующее о вашей «интерпретации цикла» …

базовый случай — это оператор if, и он действует как цикл между
п. так как n равно 3, а n равно 0, код повторяется 3 раза.

Там нет петли там. Он просто заявляет, что функция возвращает значение 0, когда $ n = 0.

Что происходит, так это функция, вызывающая себя 3 раза в строке return a + f2($n-1, $a); уменьшая $ n.

Как указано выше, вызов останавливается, когда $ n = 0 и возвращается значение 0.

Итак, если вы вызываете функцию сначала + функция, вызывающая себя 3 раза, приводит к:

4 + f2(2,4)
4 + 4 + f2(1,4)
4 + 4 + 4 + f2(0,4)
4 + 4 + 4 + 0; // 12
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector