写一个程序is_additive(s),判断一个字符串是不是加和序列。 如果一个字符串是一个加和序列,那么字符串可以被拆分成为这样一个序列,序列的相邻两项和等于下一项。

    1. 输入 : s = 235813
    2. 输出 : true
    3. 2 + 3 = 5, 3 + 5 = 8, 5 + 8 = 13
    4. 输入 : s = 199100199
    5. 输出 : true
    6. 1 + 99 = 100, 99 + 100 = 199
    7. 输入 : s = 12345678
    8. 输出 : false

    答案: 还是决策树模型,p代表决策,p中每一项都是从左侧选中的数字。

    function is_additive(s, p = []) {
      if(s.length === 0) {
        return p.length >= 3
      }
    
      // 递归体循环递归每种取字符的情况
      for(let i = 1; i <= s.length; i++) {
        const v = parseInt( s.slice(0, i) )
        const tail = s.slice(i)
        if (
          p.length < 2 || (
            p.length >= 2 &&
            p[p.length - 1] + p[p.length - 2] === v
          )
        ) { 
          if (is_additive(tail, decisions.concat(v))) {
            return true
          }
        }
      }
      return false
    }