【Python学习日记】B站小甲鱼:递归和汉诺塔问题
求阶乘 比如输入5,输出1*2*3*4*5的结果
使用循环体
def factorial(n): result = n for i in range(1,n): result *= i return result temp = int(input('输入正整数:')) print(factorial(temp))
使用递归:1.调用函数自身;2.设置正确的返回值(结束条件)
def factorial(n): if n == 1 : return 1 else: return n*factorial(n-1) temp = int(input('输入正整数:')) print(factorial(temp))
递归使用栈存储方式,比较消耗时间和空间。所以在求阶乘这种程序上递归是不被建议的,因为如果用户输入太大的数字会导致程序崩溃。python3的递归深度默认是100层
斐波那契数列 :分治思想
以迭代的方式
def factorial(n): if n == 1 or n == 2 : return 1 else: return factorial(n-1)+factorial(n-2) temp = int(input('输入正整数:')) print(factorial(temp))
以循环的方式
def fab(n): n1 = 1 n2 = 1 n3 = 1 while (n-2)>0: n3 = n1 + n2 n1 = n2 n2 = n3 n -= 1 return n3 temp = int(input('请输入正整数:')) print(fab(temp))
迭代会比较消耗时间和空间,在数字比较大的时候可以明显的感受到两个程序的消耗时间的差别
汉诺塔问题
def hanoi(n,x,y,z): if n == 1: return (x,'-->',z) else: hanoi(n-1,x,z,y) #将n-1个盘子从x移动到y上 print(x,'-->',z) #x上的盘子移动到z上 hanoi(n-1,y,x,z) #将y上的n-1个盘子移动到z上 n = int(input('输入汉诺塔的层数:')) hanoi(n,'X','Y','Z')