还是斐波那契数列
本帖最后由 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)
-----------------------------------------------------------------------------
【我的疑问】
以上两行红色字体的说法和理解不知对吗?
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:38 编辑
小甲鱼 发表于 2023-6-21 03:06
这里传入的 n 指的是第几项,所以 n == 1 或者 n == 2 的时候,结果均是 1。
值得一提的是斐波那契数 ...
哦,看来就是因为有两种说法,数列开始的数字不同(加上有的文章说的是索引或下标,见https://baijiahao.baidu.com/s?id=1677366048581863957&wfr=spider&for=pc),所以导致结束条件和递归函数的条件不同,两边说法和口径不一样,初学者理解和看得有点懵
感谢小甲鱼大师的亲自指点
页:
[1]