python語言的特點有哪些,python中的遞歸函數是什么_Python中的遞歸函數

 2023-10-04 阅读 37 评论 0

摘要:遞歸函數recursion函數直接或者間接調用自身,這就是遞歸函數。能用遞歸函數解決的問題,一般使用循環也可以解決。遞歸函數一定要有邊界遞歸函數的案例一、斐波那契數列求斐波那契數列前n項python語言的特點有哪些。def fib(n):return 1 if n < 1 else fib(n

遞歸函數recursion

函數直接或者間接調用自身,這就是遞歸函數。能用遞歸函數解決的問題,一般使用循環也可以解決。遞歸函數一定要有邊界

遞歸函數的案例

一、斐波那契數列

求斐波那契數列前n項

python語言的特點有哪些。def fib(n):return 1 if n < 1 else fib(n - 1) + fib(n - 2)for i in range(5):

print(fib(i), end=' ')

循環的寫法

def fib(n):

pre= 0cur= 1

for i inrange(n):

python字典創建方法,pre, cur= cur, pre +cur

print(cur, end=' ')

fib(5)

二、階乘

def fn(n):if n==1:return 1

return n * fn(n-1)

遞歸函數簡單實例?print(fn(5))

循環的寫法

def fn(n):

result=nfor i in range(1, n):

result*=ireturnresult

print(fn(5))

python菜鳥教程。三、冪

def p(x, y):if y == 0:return 1

return x * p(x, y - 1)

print(p(3, 3))

循環的寫法

def p(x, y):

能夠支持python開發的環境有哪些?result= 1

for _ inrange(y):

result*=x

print(result)

p(3, 3)

四、二分查找

python中屬于math庫中的數學函數。def search(seq, num, lower, upper):if lower ==upper:

assert num==seq[upper]returnupperelse:

middle= (lower + upper) //2

if num >seq[middle]:return search(seq, num, middle + 1, upper)else:returnsearch(seq, num, lower, middle)

# lst= [0,0,0,0,0,0]

lst= [4, 25, 8, 23, 4, 100, 95]

python中sort函數。lst.sort()

print(lst)

print(search(lst,0,0,0))

如果lower下限和upper上限相同,那么久可以斷言這就是要查找數字所在的位置,直接返回即可。否則,先找出中間位置,再確定是在左半部分還是在右半部分,適用遞歸調用函數即可。

可以將代碼的上限和下限參數給出默認值,這樣就使代碼更靈活

def search(seq, num, lower=0, upper=None):if upper isNone:

ls在python中的用法。upper= len(seq) - 1

if lower ==upper:

assert num==seq[upper]returnupperelse:

middle= (lower + upper) //2

if num >seq[middle]:return search(seq, num, middle + 1, upper)returnsearch(seq, num, lower, middle)

lst= [34, 67, 8, 123, 4, 100, 95]

python函數的定義和調用。lst.sort()

print(lst)

print(search(lst,34))

遞歸函數的深度問題

Python對遞歸函數的深度做了限制,默認最大1000次,可以使用sys.getrecursionlimit()查詢,使用sys.setrecursionlimit()進行修改

import sys

python怎么定義函數,print(sys.getrecursionlimit())

結果

1000

如果超出了遞歸深度的限制,將跑出異常RecursionError: maximum recursion depth exceeded

def fn():returnfn()

fn()

python中遞歸函數特點?異常

File "C:/Users/ASUS-PC/PycharmProjects/函數.py", line 98, infnreturnfn()

RecursionError: maximum recursion depth exceeded

遞歸函數的性能

遞歸和循環的性能對比

遞歸的測試

python def函數。import datetime

start=datetime.datetime.now()

n=25def fib(n):return 1 if n < 2 else fib(n - 1) + fib(n - 2)for i inrange(n):

print(fib(n), end=' ')

delta= (datetime.datetime.now() -start).total_seconds()

print(delta)

python遞歸函數詳解、運行結果

0.751987

循環的測試

import datetime

start=datetime.datetime.now()

pre= 1cur= 1

字典的數據類型是序列類型嗎?for i in range(10000):

pre, cur= cur, pre +cur

print(cur,end=' ')

delta= (datetime.datetime.now() -start).total_seconds()

print(delta)

運行結果

0.048139

對于斐波那契數列的改進

def fib(n, pre=1, cur=1):

pre, cur= cur, pre +cur

print(cur, end=' ')if n == 2:returnfib(n- 1, pre, cur)

fib(300)

間接遞歸

通過其他函數調用自身,應該從代碼規范上規避這種情況

def fn():

fn1()

def fn1():

fn()

fn()

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/111944.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息