首页 > 解决方案 > 你能用python打印第n个斐波那契序列吗?(虽然它包括一些条件)

问题描述

当给出 n 时,你们能打印第 n 个斐波那契数列吗?(使用python)但你不能使用import, for, while, if, elif, else, is, True, False, <, >, =, +, -, *, /, %, &, |, ^, ~, [, ], {, }, ‘, “, and numbers (0~9)

谁能解决这个问题???

标签: python

解决方案


因为@kuro 在评论中提出了问题,所以这是我的解决方案——不过这个问题可能会被关闭

# as n is given, assuming that is a number
n = 10


def fib(a, b, d):
    print(a)
    try:
        divmod(d, d)
        fib(b, sum((a, b)), len(range(len(((),)), d)))
    except ZeroDivisionError:
        pass


fib(len(()), len(((),)), n)

或者,如果您更喜欢可以导入和调用的函数:

def _fib(a, b, d):
    print(a)
    try:
        divmod(d, d)
        _fib(b, sum((a, b)), len(range(len(((),)), d)))
    except ZeroDivisionError:
        pass


def fib(n):
    do_fib(len(()), len(((),)), n)

一些解释,divmod(d, d)尝试自行除法,但在为零d时给出异常。d所以它是一样的:

def _fib(a, b, d):
    print(a)
    if d:
        _fib(b, sum((a, b)), len(range(len(((),)), d)))

但这是不允许的,因为if在里面。

sum((a, b))只是对 tuple 的值求和(a, b),所以它是一样的a + b,因为((),)是一个只包含 1 个元素的元组,即空元组,len(((),))只是一种复杂的编写方式1。的长度range(1, d)d负一,因此与以下内容相同:

def _fib(a, b, d):
    print(a)
    if d:
        _fib(b, a + b, d - 1)

这是微不足道的。

最后,在初始调用中,len(())是空元组的长度,所以就是0.

解决方案取决于意识到,要定义斐波那契数列,您只需要 0、1 和 + 操作,我在没有使用这些符号的情况下定义了这些操作。你需要一些方法来决定什么时候停止没有if,这是问题的另一半。


推荐阅读