主题1
已知有1、1、2、3、5、8、13、…这样的数列。 其规律从第三项开始,每个项都等于前两项之和,这个数列就是斐波那契数列。
要求符合斐波那契数列定律的第11项。
代码实现--非递归
effib_show(n ) :
a,b=0,1
while n 0:
a,b=b,a b
n -=1
返回a
print ('斐波那契数列第11项: {}'.format ) fib_show(11 ) )
代码实现--递归
effib_recursive(n ) :
if n==1 or n==2:
返回1
returnfib_recursive(n-1 ) fib_recursive (n-2 ) fib _ recursive
print ('斐波那契数列第11项: {}'.format ) FIB_recursive(11 ) ) )
主题2
要求符合斐波那契数列规律的前11项。
代码实现1
effib_show(n ) :
a,b=0,1
while n 0:
if n==1:
打印(b )是
else:
打印(b,end=',')
a,b=b,a b
n -=1
FIB_show(11 ) )。
代码实现2
effib_show(n ) :
if n==1:
return '1'
if n==2:
return ' 1,1 '
RES=[ 1,1 ]
forIinrange(2,n ) :
RES.append(RES(-1 ) RES(-2 ) ) )。
返回','.join([str(I ) for i in res]
print ('斐波那契数列前11项: {}'.format ) fib_show(11 ) )
主题3
对于斐波那契数列,1、1、2、3、5、8、13、……。 该数列中的数称为斐波那契数(Fibonacci数)。
如果给定数n,则必须是一个Fibonacci数。 可以在每一步中将当前数量n变为N-1或N 1。 将n转换为Fibonacci数至少需要几个步骤?
例如:
如果给出一个公式15,与其相邻的两个Fibonacci的数量分别为13和21,那么这个公式15成为13需要2步,成为21需要6步,所以这里最少需要2步。
实现构想
分别求出与指定数量相邻的2个Fibonacci数: a和b
分别求出指定的数量和a与b的距离步数left_step和right_step
比较left_step和right_step时,数值最小是所需的最小步数
代码实现
deffib_step(num ) :
a,b=0,1
min_step=0
while True:
当#b大于输入的数字num时,a是上一次循环的b,此时a一定小于num
if num=a and num=b:
left_step=num - a
right_step=b - num
if left_step right_step:
min_step=left_step
else:
min_step=right_step
布雷克
a,b=b,a b
return min_step
要将print('15更改为Fibonacci数,至少需要)步(.format(FIB_step(15 ) ) )
译文: https://www.cn blogs.com/wintest/p/13768793.html