当n给定时,你们能打印第n个fibonaci序列吗?(使用python)但是你不能使用import, for, while, if, elif, else, is, True, False, <, >, =, +, -, *, /, %, &, |, ^, ~, [, ], {, }, ‘, “, and numbers (0~9)
因为@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))
只是对元组(a, b)
的值求和,所以它和a + b
一样,因为((),)
是一个只包含一个元素的元组,即空元组,len(((),))
只是1
的一种复杂的写法。range(1, d)
的长度是d
- 1,所以它和:
def _fib(a, b, d):
print(a)
if d:
_fib(b, a + b, d - 1)
这是微不足道的。
最后,在初始调用中,len(())
是空元组的长度,所以就是0
。
解决方案取决于认识到,要定义斐波那契数列,您只需要0,1和+操作,我没有使用这些符号来定义它们。你需要一些方法来决定什么时候停止没有if
,这是问题的另一半。