一朵小浪花儿
2020-12-10 18:19
采纳率: 100%
浏览 37
已采纳

发现一个有意思的面试题,因该是用递归,但是该怎么做呢?

   function sum(num) {
       // 请你实现
   }
   
   const a = sum() // a === 0
   const b = sum(6)() // b === 6
   const c = sum(4)(5)() // c === 9
   const d = sum(1)(1)(1)() // d === 3
   ...
   const k = sum(n1)...(nk)() // n1 + ... + nk
  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • Yirujet 2020-12-11 13:50
    已采纳

    闭包 + 递归

    function sumTest(num) {
        var sumNum = 0
        function Sum(...args) {
            if (args.length === 0) {
                return sumNum
            } else {
                sumNum += args[0]
                return Sum.bind(null)
            }
        }
        if (!num) {
            return sumNum
        } else {
            return Sum(num)
        }
    }

     

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • 编程界明世隐 2020-12-10 23:25
    	  function sum(num,s){
    	  		s=s||0;
    	  		if(!num) return s;
    	  	
          		return function(){
          			s+=num
          			return sum(arguments[0],s)
          		}
          }
    
            
            const a = sum() // a === 0
            console.log(a)
       		const b = sum(6)() // b === 6
       		console.log(b)
       		const c = sum(4)(5)() // c === 9
       		console.log(c)
       		const d = sum(1)(1)(1)() // d === 3
       		console.log(d)
       		const e = sum(1)(2)(3)(4)(5)(6)(7)() // e === 28
       		console.log(e)

     

    这样写能达到正确的结果!哈哈

    评论
    解决 1 无用
    打赏 举报
  • 朱铭德 2020-12-10 19:22

    给你一个python版的

    def sum(num=None, num_before=0):
        if num is None:
            return num_before
        
        def sum2(num2=None):
            return sum(num2, num_before + num)
        return sum2
    

    结果都是正常的

    print(sum())  # 0
    print(sum(1)())  # 1
    print(sum(1)(2)(3)())  # 6
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题