【问题标题】:Fibonacci Recursive, why fib(2) print two?斐波那契递归,为什么 fib(2) 打印两个?
【发布时间】:2017-07-18 13:17:28
【问题描述】:
def fib(x):
  if x == 0 or x == 1:
   return 1
  else:
   return fib(x-1) + fib(x-2)

print (fib(2))

我的逻辑是:

1st fib(2-1)+fib(2-2) return fib(1) 
2st fib(1) return 1 ; 
3rd print 1 

谁能告诉我我的想法有什么问题?

【问题讨论】:

    标签: fibonacci


    【解决方案1】:

    你的逻辑在这里有问题

     if x == 0 or x == 1:
           return 1
    

    因此

        1st fib(2-1) + fib(2-2) ; 
    subdivide into fib(1) + fib(0);
        2nd fib(1) return 1 + fib(0) return 1;
        3rd 1+1 = 2;
        print 2;
    

    你的if语句状态if x== 0 OR x == 1: return 1;

    【讨论】:

      【解决方案2】:

      斐波那契数列的前5项如下:

      0 : 0
      1 : 1
      2 : 1
      3 : 2
      4 : 3
      

      您的代码会返回一个系列,其中前 5 个术语是:

      0 : 1
      1 : 1
      2 : 2
      3 : 3
      4 : 5
      

      你的函数没有返回正确值的原因是这个 if 语句:

      if x == 0 or x == 1:
          return 1
      

      这当然是完全错误的。为了得到正确的数字,你必须像这样修改你的代码:

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

      如果参数 x 为 0,则此更正函数返回 0,如果参数为 1 或 2,则返回 1。

      【讨论】:

        猜你喜欢
        • 2012-02-15
        • 2013-04-11
        • 2010-12-03
        • 2023-01-18
        • 2015-02-09
        • 1970-01-01
        • 2014-04-02
        • 2012-12-29
        相关资源
        最近更新 更多