为什么这个递归函数会像这样工作?

use*_*845 1 php algorithm recursion computer-science

我正在尝试学习递归,并编写了一个函数,它接受一个数字并将其计数到零,然后再次将其计数到原始数字,该函数有效,但我不明白为什么它的工作方式与它一样.我解释了为什么在else语句后打印的第一个打印:"5 4 3 2 1"然后数字为0并且if语句打印:"0".在这种情况之后,我不明白,因为现在函数在else语句之后进入第二个打印并打印:"1 2 3 4 5"这对我来说很奇怪.如果有人能向我解释,我真的很感激.

<?php
function rec_downandup($num){
    if($num == 0){
        print '0 ';
    }else{
        print $num.' ';
        rec_downandup($num-1);
        print $num.' ';
    }
}
rec_downandup(5);
?>
Run Code Online (Sandbox Code Playgroud)

产量

5 4 3 2 1 0 1 2 3 4 5
Run Code Online (Sandbox Code Playgroud)

ker*_*ero 8

当你仔细看时,它应该变得清晰.

print $num.' ';
rec_downandup($num-1);
print $num.' ';
Run Code Online (Sandbox Code Playgroud)

对于您的第一个输入,您将获得

print 5.' ';
rec_downandup(4);
print 5.' ';
Run Code Online (Sandbox Code Playgroud)

在那之后,它就是

print 5.' ';
print 4.' ';
rec_downandup(3);
print 4.' ';
print 5.' ';
Run Code Online (Sandbox Code Playgroud)

因此看起来功能向下和向上计数,但实际上它只是倒计时并将每个数字放置两次 - 第二次按相反的顺序排列,因此它似乎在计数.