首页
学习
活动
专区
圈层
工具
发布

Python学习笔记(11)递归

1、递归在编程上的形式是如何表现的吗?

在编程上,递归表现为函数调用本身这么一个行为 举个例子(递归求阶乘)

代码语言:javascript
复制
def factorial(n):
    if n==1:
        return 1
    else:
        return n*factorial(n-1)

num=int(input("请输入一个正整数:"))
result=factorial(num)

print("%d的阶乘是:%d"%(num,result))

2、递归必须满足的两个条件是什么?

  1. 函数调用自身
  2. 设置了正确的返回条件

3、按照递归的特性,有没有不得不使用递归的情况?

例如汉诺塔,目录索引(因为你永远不知道这个目录里是否还有目录),快速排序(二十世纪十大算法之一),树结构的定义等如果使用递归,会事半功倍,否则会导致程序无法实现或者难以理解。

4、用递归去计算阶乘或者裴波那契数列是很糟糕的算法,你知道为什么吗?

每次函数的调用都需要进行压线、弹线、保存和恢复寄存器的栈操作。而且递归如果忘了返回,会变成一个无底洞

5、简述递归的优缺点

优点:

  1. 递归的基本思想是把规模大的问题转变成规模小的问题组合,从而简化问题的解决难度(如汉诺塔游戏)
  2. 有些问题使用递归会使代码变得简洁易懂 1

缺点

  1. 递归函数的特性,会消耗大量的空间和时间;
  2. 如果忘记返回,会编程无底洞。

6、使用递归写一个power()函数模拟内建函数pow(),即power(x,y)是计算x的y次幂的值

代码语言:javascript
复制
def power(x,y):
    if y==0:
        return 1
    else:
        return x*power(x,y-1)
res=power(3,0)
print(res)

往期笔记

Python学习笔记(1)

Python学习笔记(2)

Python学习笔记(3)

Python学习笔记(4)

Python学习笔记(5)

Python学习笔记(6)

Python学习笔记(7)

Python学习笔记(8)

Python学习笔记(9)

Python学习笔记(10)

举报
领券