python рекурсия oop против функциональных - PullRequest
0 голосов
/ 08 апреля 2020

Мне любопытно, почему эта первая функция работает (OOP), но вторая вызывает и ошибка. Может кто-нибудь объяснить?

class Solution(object):
    def __init__(self):
        self.solved = {0:0,1:1,2:1}

    def fibonacci(self, n):
        """
        :type n: int
        :rtype: int
        """
        if n in self.solved.keys():
            return self.solved[n]
        else:
            value = self.fibonacci(n-1) + self.fibonacci(n-2)

        self.solved[n] = value
        return value

t = Solution()
t.fibonacci(7)
>>> 13

Но это не работает

found = {0:0,1:1,2:1}
def fibonacci(n):
    if n in found.keys():
        return found[n]
    else:
        value = fibonacci(n-1) + fibonacci(n-2)

    found[n] = value
    return value
fibonacci(7)
>>>TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'

Редактировать: ошибка обнаруживается только при выполнении в Google Colab, а не в локальной python IDE.

...