c++如何将两个if函数合并_设计一个 add 函数
生活随笔
收集整理的這篇文章主要介紹了
c++如何将两个if函数合并_设计一个 add 函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這也是群內一位小伙伴提供的一道頭條面試題,應該是前端面試的。大概描述下原題含義:給出如下方法調用:add(2,4,5)?//?11add(2)(4,5) // 11add(2,4)(5) // 11add(2)(4)(5)?//?11請寫出 add 函數具體的實現觀察下,一共三個數值,有兩種情況...1.?add 方法接受三個參數,直接返回結果2. add?也可能接受一個或兩個參數,返回一個函數,將剩下的參數,繼續進行一次或多次調用這里我用 JavaScript 來實現,既能返回函數,又能返回方法,其它語言真的不好弄。JavaScript 每個 function 函數都有個默認的 arguments 參數,從此著手,add 方法返回一個函數,將兩個函數的參數合并,超過三個則返回結果,否則繼續返回函數繼續接受參數。function add() { let args = [...arguments]; function sumFun() { args = args.concat([...arguments]) if (args.length >= 3) { return args.reduce(((a, b) => a + b), 0) } return sumFun; } return sumFun();}console.log(add(2, 4, 5)) // 11console.log(add(2)(4, 5)) // 11console.log(add(2, 4)(5)) // 11console.log(add(2)(4)(5))?//?11
這里其實想考的是 currying 函數,也就是部分求值,其含義是給函數分步傳遞參數,每次傳遞參數后部分應用參數,并返回一個更具體的函數接受剩下的參數,這中間可嵌套多層這樣的接受部分參數函數,直至返回最后結果。所以本題也可以創建一個高階函數,接受一個 fun 和?總的參數個數,當方法參數個數小于總參數個數時,合并參數,繼續調用,否則,調用給定 fun。function fixCurry(fn, totalArgs) { totalArgs = totalArgs || fn.length return function recursor() { return arguments.length < fn.length ? recursor.bind(this, ...arguments) : fn.call(this, ...arguments); }}let add = fixCurry((a, b, c) => a + b + c);console.log('Add')console.log(add(2, 4, 5)) // 11console.log(add(2)(4, 5)) // 11console.log(add(2)(4)(5)) // 11console.log(add(2, 4)(5)) // 11let mul = fixCurry((a, b, c) => a * b * c);console.log('Multiple')console.log(mul(2, 4, 5)) // 40console.log(mul(2)(4, 5)) // 40console.log(mul(2)(4)(5)) // 40console.log(mul(2,?4)(5))?//?40以上。
這里其實想考的是 currying 函數,也就是部分求值,其含義是給函數分步傳遞參數,每次傳遞參數后部分應用參數,并返回一個更具體的函數接受剩下的參數,這中間可嵌套多層這樣的接受部分參數函數,直至返回最后結果。所以本題也可以創建一個高階函數,接受一個 fun 和?總的參數個數,當方法參數個數小于總參數個數時,合并參數,繼續調用,否則,調用給定 fun。function fixCurry(fn, totalArgs) { totalArgs = totalArgs || fn.length return function recursor() { return arguments.length < fn.length ? recursor.bind(this, ...arguments) : fn.call(this, ...arguments); }}let add = fixCurry((a, b, c) => a + b + c);console.log('Add')console.log(add(2, 4, 5)) // 11console.log(add(2)(4, 5)) // 11console.log(add(2)(4)(5)) // 11console.log(add(2, 4)(5)) // 11let mul = fixCurry((a, b, c) => a * b * c);console.log('Multiple')console.log(mul(2, 4, 5)) // 40console.log(mul(2)(4, 5)) // 40console.log(mul(2)(4)(5)) // 40console.log(mul(2,?4)(5))?//?40以上。
總結
以上是生活随笔為你收集整理的c++如何将两个if函数合并_设计一个 add 函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中使用函数的优点,对于pyt
- 下一篇: jqgrid本地数据例子_微型数据转换器