Python 递归

 

一个函数在其定义中调用自身的方法即为递归( recursion)。构成递归需要满足两个条件,第一个是子问题与父问题存在同样的处理逻辑,第二个就是要有递归出口—化简为非递归处理方式。

 

在某些场景下,使用递归,不仅可以大大减少程序的代码量,而且问题也会变得极其简单。

需要注意的是:每一次函数的调用都涉及到一个桢栈的入栈到出栈,同时,会涉及到分配内存空间,保存参数,返回地址和临时变量,而且往栈里压入数据和弹出都需要时间,所以当递归的层数越大时,对服务器的内存消耗也越大,而程序的运行时间也越长。

 

举个栗子:

汉诺塔问题使用递归求解及其方便。

#!/usr/bin/env python3
# -*- coding:utf-8 -*-

def han_tower(n,x,y,z):
    if n == 1:
        print("move: ",x," --> ",z)
    else:
        han_tower(n-1,x,z,y) # 将n-1层移动到y上面
        han_tower(1,x,y,z)   # 将最下面一层移动到z上面
        han_tower(n-1,y,x,z) # 将n-1层从y上面移动到z上面

number = int(input("请输入汉诺塔的层数: "))
han_tower(number,"a","b","c")

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值