递归(Recorsion)
递归算法里面最经典的两个非fibonacci和hanio莫属了
今天练习就这两数列用python代码实现
斐波那契数列
''' Fibonacci(斐波那契数列) 1,1,2,3,5,8,13,25.... ''' #使用递归 #算法复杂度:O(2^n) 注:该递归算法复杂度较高,且运行速度较慢 #定义实现函数 def fib(n): if n <= 1: return n else: return(fib(n-1) + fib(n-2)) # 获取用户输入 num = int(input("您要输出几项? ")) # 检查输入的数字是否正确 if num <= 0: print("输入正数") else: print("斐波那契数列:") for i in range(num): print(fib(i)) #输出结果 #输出结果 您要输出几项? 10 斐波那契数列: 0 1 1 2 3 5 8 13 21 34
#使用简单的函数 #算法复杂度更低的fibonacci数列 #算法复杂为O(n) def fib(n): num, a, b = 0, 0, 1 while num < n: print(b) a, b = b, a + b n = n + 1 return 'done' #输出结果 >>> fib(6) 1 1 2 3 5 8 'done'
汉诺塔
#递归 #算法复杂度:O(2^n) ''' 设定三根棒子从左到右为:x、y、z 思路: 第一步:x上的(n-1)个盘子借助 z 到 y上 第二步:y上的(n-1)个盘子借助 x 到 z上 ''' def hanio(n,x,y,z): if n == 1: print(x,'-->',z) #如果只有一层,直接从x移动到z else: hanio(n-1,x,z,y) #将n-1个盘子从x移动到y print(x,'-->',z) #最底下的盘子从x移动到z hanio(n-1,y,x,z) #将n-1个盘子从y移动到z n = int(input('please input the floor:')) hanio(n,'x','y','z') #输出结果 please input the floor:3 x --> z x --> y z --> y x --> z y --> x y --> z x --> z