javaScript怎样理解这段代码的计算方式

结果为什么alert是12,怎么理解?


    function lj(n){
         if (n == 3){
         return n;
         } else {
         return n+lj(n-1);
         }
       }
         var a = lj(5);
         alert(a);

传入5走进else 变成 5+lj(4)
然后 变成了 传入4走进else 变成 5+4+lj(3)
lj(3)=3
所以是 5+4+3 =12

5+ lj(4)=4+lj(3)=3 ==== 5 + 4 + 3 = 12

这是一个递归调用。
递归函数的定义如下:
当n=3时,f(3)=3
当n>3时,f(n)=n+f(n-1)

另外这个代码还需要做一些限制,n < 3这个递归就会一致循环到报错。所以需要对传入的n的大小进行限制。