为什么在此backword字符串递归中需要else语句?

时间:2020-06-22 23:10:21

标签: loops recursion

在以下问题中,我最初没有else括号,并认为代码可以正常运行。在我看来,如果我在“ if语句”之外有代码,它将自动默认为“ else”。但是,只有当我DID带有else括号时,代码才能正常工作并正常运行。

有人可以解释为什么需要其他括号吗?

    function backwardString(string) {

        if( string.length === 1 ) {
            // base case  
            console.log (string)
        }
        else {
            // recursion itself 
    
            console.log(string[string.length-1]) 
    
            //call the function again()
//          console.log( string.substring( 0,string.length - 1 ) )
            backwardString( string.substring( 0, string.length - 1 ) )
        }
    }
    
    backwardString('happy');
    // y
    // p
    // p
    // a
    // h

1 个答案:

答案 0 :(得分:0)

这是一个函数的示例,其中我们return因此强制执行控制流:

function fac(n) {
  if (n === 0) {
    return 1;
  }
  return n * fac(n - 1); 
}

因此,代码将从顶部开始,然后执行语句到语句。使用递归功能时,没有区别。当调用递归函数时,所有绑定和局部变量对该调用都是唯一的,被调用方以与调用完全唯一的非递归函数相同的方式等待。起作用的递归函数会遇到基本情况,然后返回到calee。如果您在if之外有额外的代码行,则基本情况和默认情况下的if一旦完成都会对其进行评估

在此示例中,无论test是什么,始终会调用code1和code4,并且根据表达式code2是否正确,调用code3test。 / p>

code1()
if (test) {
  code2()
} else {
  code3()
}
code44();