網站首頁 編程語言 正文
遞歸也是常見算法之一,其時間復雜度一般認為O(logn),但遞歸算法的時間復雜度本質上是要看: 遞歸的次數 * 每次遞歸中的操作次數
舉例面試題:求x的n次方
思路一:for循環
def x_n(x,n): ? ? """ ? ? 時間復雜度O(n) ? ? """ ? ? if n==0: ? ? ? ? return 1 ? ?? ? ? return x*x_n(x,n-1) ? ?? if __name__=='__main__': ? ? print(x_n(2,0)) ? ? print(x_n(2,3)) ? ? print(x_n(2,4))
思路二:遞歸
但是遞歸時間復雜度未必更優,
比如:
def x_n(x,n): ? ? """ ? ? 時間復雜度O(n) ? ? """ ? ? if n==0: ? ? ? ? return 1 ? ?? ? ? return x*x_n(x,n-1) ? ?? if __name__=='__main__': ? ? print(x_n(2,0)) ? ? print(x_n(2,3)) ? ? print(x_n(2,4))
也可以是:
def x_n(x,n): ? ? """ ? ? 時間復雜度O(n) ? ? """ ? ? if n==0: ? ? ? ? return 1 ? ? if n%2==1: ? ? ? ? return x*x_n(x,n//2)*x_n(x,n//2) ? ?? ? ? else: ? ? ? ? return x_n(x,n//2)*x_n(x,n//2) if __name__=='__main__': ? ? print(x_n(2,0)) ? ? print(x_n(2,3)) ? ? print(x_n(2,4))
如果面試官詢問是否還可以優化?可思考的方向是遞歸模塊提取出來。
def x_n(x,n): ? ? """ ? ? 時間復雜度O(logn) ? ? """ ? ? if n==0: ? ? ? ? return 1 ? ? t=x_n(x,n//2) ? ? #print("t:",t) ? ? if n%2==1: ? ? ? ? return x*t*t ? ?? ? ? return t*t if __name__=='__main__': ? ? print(x_n(2,0)) ? ? print(x_n(2,3)) ? ? print(x_n(2,4))
原文鏈接:https://blog.csdn.net/q339179198/article/details/123560095
相關推薦
- 2022-04-14 android studio不顯示當前手機app進程
- 2022-07-10 pdb時區問題:與當前時間不一致
- 2023-01-09 pip升級pip3的快速方法指南_python
- 2022-09-26 數據庫多表聯查的方式
- 2022-05-13 python實現圖書館借閱系統_python
- 2022-05-28 Python實現孤立隨機森林算法的示例代碼_python
- 2022-07-25 SQL?Server系統函數介紹_MsSql
- 2022-07-17 代碼解析python標準庫logging模塊_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支