【问题标题】:Why do I need an else statement in this backword string recursion?为什么在这个 backword 字符串递归中需要一个 else 语句?
【发布时间】:2020-10-12 22:21:31
【问题描述】:

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

有人可以解释为什么需要 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

【问题讨论】:

  • “在我看来,如果我在“if 语句”之外有代码,它会自动默认为“else”。 - if 不是这样工作的。我想你在想当if 分支中有return 语句时。
  • 想一想:如果您没有else,那么在基本案例代码运行后执行流向哪里?
  • @Dai,是的,你是对的......这就是我的想法,感谢您的澄清!

标签: loops recursion


【解决方案1】:

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

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

因此代码将从顶部开始,然后逐句执行。对于递归函数,没有区别。当递归函数被调用时,所有绑定变量和局部变量对于该调用都是唯一的,并且被调用者以与调用完全唯一的非递归函数相同的方式等待。一个有效的递归函数会遇到一个基本情况,然后它会返回到 calee。如果在 if 之外有额外的代码行基本情况和默认情况都会在 if 完成后评估它

在本例中,无论test 是什么,总是调用code1 和code4,并且您调用code2code3,具体取决于表达式test 是否为真。

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

【讨论】:

  • 好的,这有助于我理解它。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
  • 1970-01-01
  • 2019-10-29
  • 2019-12-11
  • 2012-01-22
  • 2013-03-20
相关资源
最近更新 更多