斐波那契数列
1.迭代法
def fab(n):
n1=1
n2=1
n3=1
if n<1:
print("输入有误!")
return -1
while (n-2)>0:
n3=n1+n2
n1=n2
n-=1
return n3
temp=int(input('请输入一个正整数:'))
result=fab(temp)
if result!=-1:
print('该斐波那契数列的值为:',result)
2.递归法
def fab(n):
if n < 1:
print("输入有误!")
return -1
if n==1 or n==2:
return 1
else:
return fab(n-1)+fab(n-2)
temp=int(input('请输入一个正整数:'))
result=fab(temp)
if result!=-1:
print('该斐波那契数列的值为:',result)
3.python的特色写法:
def fab():
temp = int(input('输入一个正整数:'))
a,b = 0,1
while b < temp:
print(b)
a,b = b,a+b
4.面向对象,生成迭代器的写法(__ iter __的用法)
class Fab(object):
def __init__(self,temp):
self.a,self.b = 0,1
self.temp = temp
def __iter__(self):
return self
def __next__(self):
self.a, self.b = self.b, self.a + self.b
if self.a > self.temp:
raise StopIteration()
return self.a
temp = int(input('请输入一个正整数:'))
for i in Fab(temp):
print(i)
5.面向对象(2),使对象可以像list一样,可以进行下标取元素或切片选元素(__ getitem __的用法)
class Fab(object):
def __getitem__(self, item):
if isinstance(item,int):
a, b = 1, 1
for i in range(item):
a, b = b, a + b
return a
if isinstance(item,slice):
start = item.start
stop = item.stop
if start is None:
start = 0
a, b = 1, 1
L = []
for x in range(stop):
if x >= start:
L.append(a)
a, b = b, a + b
return L
f = Fab()
print('切片的斐波那契数列:')
temp1 = int(input('请输入起始值【非负整数】:'))
temp2 = int(input('请输入结束值【非负整数】:'))
for i in f[temp1:temp2]:
print(i)
print('指定位置的斐波那契数列:')
temp3 = int(input('请输入位置【非负整数】:'))
print(f[temp3])
汉诺塔
def hanoi(n,x,y,z):
if n ==1:
print(x,'移动到',z)
else:
hanoi(n-1,x,z,y)# 将前n-1个盘子从x移动到y上
print(x,'移动到',z)#将最底下的最后一个到z上
hanoi(n-1,y,x,z)#将y上的n-个盘子移动到z上
n=int(input('请输入汉诺塔层数:'))
hanoi(n,'X','Y','Z')