可以使用python打印第n个fibonaci序列吗?(但也有一些条件)



当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,这是问题的另一半。

最新更新