<script>
function sum(n) {
if(n == 1)
return 1;
else
return (n + sum(n-1));
//шаг 4. sum(4) = sum(3) + 4 = ??? Компьютер хочет решить sum(4),но для того чтобы его решить, нужно вызвать ту же функцию, но в шаге 3(sum3),
//шаг 3.sum(3) = sum(2) + 3 = 6 но для этого надо вызывать ту же функцию в шаге 2 (sum2)
//шаг 2.sum(2) = sum(1) + 2 = 3 , на шаге один зеркало в зеркале заканчивается, так как решение шага один однозначно указано и является 1( мы четко указали что sum(1) = 1 и никаких функций, чтобы его решить не нужно вызывать)
//, Итак, чтобы подсчитать результат 10, нужно решить функции со всеми n . Как зеркало в зеркале до определенного момента программа решает функции, одну рядом с другой(как бы одну вложенную в другую).Решив все шаги(вызвав все функции) до шага 1 компьютер возвращается к шагу 4 и выдает результат sum(4) = 10. Если бы sum(1) не был определен однозначно - зеркало в зеркале было бы бесконечно.
//теперь программа смогла решить, что sum(4) = sum(3) + 4 = 10
}
alert( sum(4) );
</script>