自定义函数Fib_n(n)计算斐波那契数列中第一次出现n位数字的是哪一项,返回项的序号及该数。输入待寻找的斐波那契数列中第一次出现的位数n,调用Fib_n()函数计算并输出满足要求的项的序号及数。
输入
[1,1000]范围内的一个整数
输出
第一次出现的该数长度的斐波那契数
样例输入
10
样例输出
Fib(45)=1134903170
我的问题是 如何递归?
def fib_n(n):
if n == 1:
return 0, 0
else:
a = [0, 1]
i = 2
while True:
t = a[i-2] + a[i-1]
if len(str(t)) == n:
return t, i
a.append(t)
i += 1
b = int(input(">>>"))
s,j = fib_n(b)
print(f"Fib({j}) = {s}")
建议不要用递归,如果n=300,应该跑一天也跑不出来
我给个例子你参考一下:
def Fib_n(n):
a = 1
b = 1
num = 2
if n==1:
return 1,1
while True:
c = a+b
num +=1
a = b
b = c
if len(str(c))==n:
return num,c
length = int(input("请输入一个1-1000的数:"))
order_no, data = Fib_n(length)
print(f"第一个{length}位的数字出现在第{order_no}项,数字是:{data}")