Python条件运算符’if else’不等于’和’或’
作者:互联网
参见英文答案 > Does Python have a ternary conditional operator? 27个
我认为下面两个函数的结果是一样的,但事实并非如此.
def fib2(n):
return n and n < 2 or fib2(n-1) + fib2(n-2)
def fib3(m):
return m if m < 2 else fib3(m-1) + fib3(m-2)
当参数值为4时,fib2的输出为7,fib3的输出为3.为什么会出现这种情况?
我不知道这个.
我的Python版本是2.7.9,os是osX 10.11.1
解决方法:
我试着更冗长,并写下你的函数:
def fib2(n):
ret = n and n < 2 or fib2(n-1) + fib2(n-2)
print "fib2({}) = {}".format(n, ret)
return ret
print fib2(4)
def fib3(m):
ret = m if m < 2 else fib3(m-1) + fib3(m-2)
print "fib3({}) = {}".format(m, ret)
return ret
print fib3(4)
似乎fib2试图为数字添加布尔值,这就是为什么它不正确. fib3只处理数字并且是正确的.但请注意,这不是推荐的计算斐波纳契数的方法!如果您尝试使用fib3(1000),它将无限运行.最好从0和1开始,而不是使用递归来计算Fibonacci数.
我写了一个简短的函数,为你计算Fibonacci数#n:
def fib4(n):
a = 0
b = 1
for i in range(1, n + 1):
a, b = (b, a + b)
return a
print fib4(0)
print fib4(1)
print fib4(2)
print fib4(3)
print fib4(4)
print fib4(1000)
请注意,它也适用于n == 1000.
标签:python,conditional-operator,python-2-7 来源: https://codeday.me/bug/20190706/1397962.html