lzb1001 发表于 2023-6-21 01:46:08

还是斐波那契数列

本帖最后由 lzb1001 于 2023-6-21 07:41 编辑

斐波那契数列0、1、1、2、3、5、8、13、21、34、……,从第3项也就是1开始及其后的每项等于其前两项的和。


I. 下例中用完整包括0在内的斐波那契数列,传入的n是索引或下标,而不是项号??? 见https://baijiahao.baidu.com/s?id=1677366048581863957&wfr=spider&for=pc中的序号④



def fib(n):
    if n == 0:
      return 0
    if n in : # 也可写成if n == 1 or n == 2:
      return 1
    return fib(n - 1) + fib(n - 2)

while True:
    number = input('请输入索引或下标:').strip()
    if len(number) == 0: # 避免输入空值
      print()
      continue
    elif int(number) <= 0: # 避免输入0或负数
      print('输入错误!请确认后重新输入!', '\n')
    else:
      print(f'索引或下标 {number} 对应的数列的值:{fib(int(number))} ', '\n')




II. 下面是小甲鱼小兔崽子例子,用不包括0在内的斐波那契数列,传入的n是项号,而不是索引或下标???



# p6_8.py

def fib(n):

    if n < 1:
      print('输入有误!')
      return -1
    if n == 1 or n == 2:
      return 1
    else:
      return fib(n - 1) + fib(n - 2)

-----------------------------------------------------------------------------

【我的疑问】

以上两行红色字体的说法和理解不知对吗?

小甲鱼 发表于 2023-6-21 03:06:23

def fib(n):
    if n < 1:
      return -1
    if n == 1 or n == 2:
      return 1
    else:
      return fib(n-1) + fib(n-2)
这里传入的 n 指的是第几项,所以 n == 1 或者 n == 2 的时候,结果均是 1。

值得一提的是斐波那契数列第一项有的说法是 0,即 0 1 1 2 3 5 ...;有的说法是 1,即 1 1 2 3 5 ...,这里的代码采用的是第二种说法,即第一项为 1 开始。

lzb1001 发表于 2023-6-21 09:37:02

本帖最后由 lzb1001 于 2023-6-21 09:38 编辑

小甲鱼 发表于 2023-6-21 03:06
这里传入的 n 指的是第几项,所以 n == 1 或者 n == 2 的时候,结果均是 1。

值得一提的是斐波那契数 ...

哦,看来就是因为有两种说法,数列开始的数字不同(加上有的文章说的是索引或下标,见https://baijiahao.baidu.com/s?id=1677366048581863957&wfr=spider&for=pc),所以导致结束条件和递归函数的条件不同,两边说法和口径不一样,初学者理解和看得有点懵




感谢小甲鱼大师的亲自指点
页: [1]
查看完整版本: 还是斐波那契数列