python学习 递归法实例 斐波那契数列及汉诺塔

斐波那契数列

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')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值