猿问

柯里化和递归

我的问题与这里的问题密切相关: Python 中的函数链 ,这是CodeWars 上的“A 链添加函数”问题。链接中有很多有用的解决方案,但我只想找出我自己的解决方案有什么问题。


例如,我想到的第一件事就是使用 Currying


def add(a):

    def add2(b):

        return b + a

    return add2


add(1)(2)

会给我3作为输出。


现在,我想补充递归,这样add(1),add(1)(2)(3)和add(1)(2)(3)(4)等也按预期方式工作:


def add(a):

    if not callable(a):

        return a

    else:

        def add2(b):

            return b + add(a)

        return add2

这次按预期add(1)返回1,但是add(1)(2),add(1)(2)(3)等等给了我错误:


TypeError: 'int' object is not callable

谁能指出这里有什么问题?另外,如何解决呢?非常感谢您的帮助!


不负相思意
浏览 156回答 2
2回答

翻阅古今

谁能指出这里有什么问题?当你调用它add(1),然后a是1(所以不是调用),它会返回1。下一步:您将拥有1(2)但因为1不是可调用的所以失败了。另外,如何解决呢?你不能,因为你需要知道什么时候结束递归,但你只知道在你完全完成当前步骤后是否需要更深入。因此,不幸的是,您选择的方法不起作用,您必须寻找不同的方法。这就是您指向有关函数链的问题的链接的地方。
随时随地看视频慕课网APP

相关分类

Python
我要回答