22-python基础11-递归函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了22-python基础11-递归函数相关的知识,希望对你有一定的参考价值。

递归

1.定义:在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。

阶乘实例

技术分享
1 n = int(input(">>:"))
2 
3 
4 def f(n):
5     s = 1
6     for i in range(2, (n + 1)):
7         s *= i
8     return s
9 print(f(n))
技术分享

递归

技术分享
1 def factorial_new(n):
2  
3     if n==1:
4         return 1
5     return n*factorial_new(n-1)
6  
7 print(factorial_new(3))
技术分享

递归函数的特点:

  1 调用自身函数

  2 有一个明显的结束条件,问题规模相比上次递归有所减少

优点: 定义简单,逻辑清晰,所有的递归函数都可以写成循环的方式,但是循环的逻辑不如递归清晰。

但是,递归的效率不高,递归层次过多会导致栈溢出,大概1000层。

2.斐波那契数列

技术分享
 1 def fibNum(n):          #斐波那契数列
 2     a, b = 0, 1
 3     for i in range(n):
 4         b, a = a+b, b
 5     return b
 6 n = int(input(">>:"))
 7 if n == 1:
 8     print(0)
 9 elif n == 2:
10     print(1)
11 else:
12     print(fibNum(n-2))
技术分享

用递归写

技术分享
 1 def fibo(n):
 2     before = 0
 3     after = 1
 4     if n == 0 or n == 1:
 5         return n
 6 
 7     if n <= 3:
 8         return 1
 9     return fibo(n-1)+fibo(n-2)
10 
11 print(fibo(3))
技术分享

递归效率低,当数字过大时,会很慢

3.python递归的限制


import sys
print(sys.getrecursionlimit())
#1000
sys.setrecursionlimit(10000)
print(sys.getrecursionlimit())
#10000

 






以上是关于22-python基础11-递归函数的主要内容,如果未能解决你的问题,请参考以下文章

Java基础之方法的调用重载以及简单的递归

Java基础入门五)之方法以及递归算法

Java 基础语法方法的使用

11.高阶函数(匿名/*递归/函数式)对象编程基础

Python基础day-11[内置函数(未完),递归,匿名函数]

java基础3-重载+命令行传参+递归+数组+排序