python中递归的奇怪行为

时间:2015-02-05 18:46:53

标签: python python-2.7 python-3.x recursion

我在python中有一个简单的函数:

def fun(num):
     if num ==0:
       return 0
     if num==1 or num==2:
       return 1
   return fun(num-1) + fun(num-2)

我称之为:print fun(10)。我希望收到一系列数字,但我得到这些数字的总和。我哪里错了?

3 个答案:

答案 0 :(得分:0)

与评论一样,您的函数会生成一个值而不是列表(即数字序列)。阅读您的问题,看起来您正在尝试生成斐波那契序列。下面的函数将生成序列中的第n个术语,列表理解(在最终的打印语句中)将生成所需的数字序列。

In [18]:

def fib(Nth_Term):
    if Nth_Term == 0:
        return 0
    elif Nth_Term == 1 or Nth_Term == 2:
        return 1
    return fib(Nth_Term - 1) + fib(Nth_Term - 2)

print fib(0)
print fib(1)
print fib(2)
print fib(3)
print fib(10)
print [fib(num) for num in range(0, 11)]
0
1
1
2
55
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

答案 1 :(得分:0)

我认为你打算将它们连接成一个字符串。您需要首先使用str(number)将字符串转换为字符串才能执行此操作。但即便如此,这个功能也毫无意义......这就是你的功能所做的:

fun(5)  
=fun(4)+fun(3)  
=fun(3)+fun(2)+fun(2)+fun(1)  
=fun(2)+fun(1)+1+1+1  
=1+1+1+1+1

fun(6)  
=fun(5)+fun(4)  
=1+1+1+1+1+1+1+1

所以最后,它只会将一堆组合在一起。有些东西告诉我那不是你想要的。

答案 2 :(得分:0)

可能你想做的是:

def fib_list(n):
  if(n == 0):
    return [1]
  if(n == 1):
    return [1,1]
  f = fib_list(n-1)
  f = f + [f[-1] + f[-2]]
  return f

print fib_list(10)
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]