python编程计算棋盘放米_Python解题记录第6题

随笔 20190801 Python解题记录第6题

许灼灼 记录于20190801

题目来源:菜鸟教程

题目序号:6

题目描述:斐波那契数列。

什么是斐波那契数列?

斐波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34…..

在数学上,费波那契数列是以递归的方法来定义

F0 = 0 (n=0)

F1 = 1 (n=1)

Fn = F[n-1]+ F[n-2](n=>2)

【解析解答】

一般来说,围绕斐波那契数列有两个相关的问题

1是输出n个斐波那契数列的值

2是输出第n个序列的值

首先,我们来讲第一个问题,就是把题目具体化,请输入n值,输出n个斐波那契数列的值

根据上面数学的描述,将其转换为程序代码,采用for循环依次计算,依次输出即可

代码如下所示:

n=int(input("请输入n的值:")) # 输入n值

f0=1 # 第一个值

f1=1 # 第二个值

print(f0,end=",") # 输出第一个值

print(f1,end=",") # 输出第二个值

for i in range(3,n+1): # 循环

f2=f0+f1 # 计算前两个值之和

print(f2,end=",") # 输出

f0=f1 # 把第二个值赋值给第一个值

f1=f2 # 把第三个值赋值给第二个值

运行结果:

请输入n的值:9

1,1,2,3,5,8,13,21,34,

其次,我们来讲第二个问题:输入n值,计算斐波那契数列中第n的那个值

在这里,它不关心前面n-1所对应的值是多少,只需要知道第n个值,根据斐波那契数列的定义

F[n] = F[n-1]+ F[n-2]

F[n-1] = F[n-2]+ F[n-3]

F[n-2] = F[n-3]+ F[n-4]

F[n-3] = F[n-4]+ F[n-5]

当n-m=0或1的时候,我们就能知道等号右边的结果,从而就能知道等号左边的值,再往上,从而得到结果,这便是递归函数的过程

递归,递归,就是递过去,归回来,递过去一个问题,归回来一个问题,再递过去一个问题,归回来一个问题,直到归回来一个答案为止,再逆推着反复一遍即可

在这里,我们就可以采用递归函数来解决这个问题

代码如下所示:

def fib(n): # 定义递归函数fib,参数为N

if n==1 or n==2: # 如果传过来的n值是1或者2,则返回1

return 1

return fib(n - 1) + fib(n-2) # 否则返回前两个数之和

n=int(input("请输入n的值:")) # 输入n值

print("斐波那契数列中第{}个的值是:{}".format(n,fib(n))) #输出结果

注意:当计算量变得很大的时候,不建议用递归函数,因为每次递归都会在内存中开辟一个位置,很耗内存,空间换时间嘛

最后,如果既需要输出斐波那契数列,又需要知道第几个数是多少,可以将数列保存到列表中,代码如下所示:

xlist=[] # 定义列表

for i in range(0,20): # 循环

if i==0 or i==1: # 如果为0或者1,则添加到列表中

xlist.append(1)

else: # 否则,则取前两个数之和

xlist.append(int(xlist[i-2])+int(xlist[i-1]))

print(xlist) # 输出列表

print(xlist[10]) # 输出列表中的某个数

【题目拓展】

对于递归函数的运用,可以多多练习题目来进行提升

题目举例:国王与数学家阿基米德下棋,在棋盘上放米.

第一个格子放一粒米,第二个格子放二粒米,第三个格子放四粒米,第四个格子放十六粒米.按这个方法摆满棋盘,请问在第18格格子中应放多少米

小王看一本书第一天看了20页,以后每天都比前一天多看2页,第30看了78 页正好看完。这本书共有(      )页

在数列4,9,16,25,36,……中,第79个数是多少?

等差数列2,6,10,14…..求第98项是多少?

求等差数列46,52,58,……,172共有(    )项?

【写在最后】

斐波那契数列可以锻炼学生熟悉递归函数

解决本题,需要学生理解题意,并尝试在纸上逐步罗列,并具有将数学公式转为程序的能力。需要学生有for结构,if结构,以及列表的基础知识

多加练习后面的习题,有助于学生熟练掌握递归函数

【展示下一题】

题目序号:7

题目描述:将一个列表的数据复制到另一个列表中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值