Python 递归

递归

Python中,简单来说所谓递归就是自身调用自身的过程。

以下列代码为例:

def funA():
    print("我在调用自己!")
    funA()

 运行截图:

此时程序会无休止的运行输出结果 “我在调用自己啊”

(如果用的是IDLE,我们可以使用快捷键 Ctrl+C 强制停止程序)

如果想让递归正常工作需要设置一个结束条件,并且每次调用都要向着这个条件靠拢。

代码如下

def funB(i): #传入一个参数i
    if i > 0: #结束条件
        print("我是第{}个".format(i))
        i -= 1  #每次调用都会向着结束条件靠近
        funB(i)

funB(10)

运行结果:

例题

1.分别用迭代和递归的方式实现阶乘

阶乘!指的是所有小于以及等于改数的正整数的积

列如5的阶乘为:5*4*3*2*1=120

迭代:

(这里我用的是IDLE交互式运行的,因为文件式的我运行不返回结果 用print(result) 可以打印出来,目前我还没找原因)

def funC(n):
	result = n
	for i in range(1,n):
		result *= i
	return result

funC(5)

运行结果

递归:

def funD(n):
    if n == 1:
        return 1
    else:
        return n * funD(n - 1)

funD(5)

运行结果

 2.分别使用迭代和递归实现斐波那契 

迭代实现斐波那契数列

def funE(n):
    a = 1
    b = 1
    c = 1
    while n > 2:
        c = a + b
        a = b
        b = c
        n -= 1
    return c
funE(12)

运行截图

 递归实现斐波那契数列

def funF(n):
	if n == 1 or n == 2:
		return 1
	else:
		return funF(n-1) + funF(n-2)

funF(12)

运行结果

 如果使用递归方式传入的值过大,可能会运行加载很长时间,因为每次调用递归不会立即返回结果,而是等到最底层的代码执行完,然后再一层一层的往上走。比较耗费资源,而迭代就不会这样。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学者山羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值