日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

回溯和递归的区别(简述)

發布時間:2023/12/19 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 回溯和递归的区别(简述) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

回溯和遞歸的區別(簡述)

    • 前言
      • 遞歸和回溯
    • 最后

前言

最近在LeetCode上刷題刷到了遞歸實現的回溯算法,產生疑惑:這兩者有什么區別呢?在網絡上閱讀了一些相關的文章,總結了一些:


遞歸和回溯

遞歸:遞歸(recursion)是一種算法,在函數中調用自身的方法稱為遞歸。

如果我們要構造某一個狀態A,需要得到它的子狀態B,構造子狀態B需要B的子狀態C,直到最深層的子狀態N(最小子狀態)被構造。

假設子狀態C為最小子狀態(出口),C構造成功后返回并完成子狀態B的構造,B構造成功后返回并完成狀態A的構造。

遞歸經典例子(計算階乘):

factorial(int n) {int m;if (n <= 1)m = 1;else m = n * factorial(n - 1);return m; }

回溯:回溯(backtrack)則是一種算法思想。

我們取第一種解釋:上溯,向上推導。一個問題推導出多種可能,則選中其中一種可能繼續推導。如果一條路到達盡頭,則回到起點,選擇另外的路徑繼續推導,直到所有可能被推導完畢。
(另外的路徑:含有與之前推導過的路徑 不同的可能 的路徑)

知道深度優先搜索的同學,回溯就好像每結束深搜中的一條路線,都會返回一個這條路線上的元素所組成的序列,當所有序列被 一 一 列出,回溯結束。

算法上回溯常被用遞歸來實現,我把它理解成“子狀態不唯一的遞歸”(或者是“多分支的遞歸”)


回溯有剪枝的功能:每次剪掉 (輸出) 符合條件的樹枝,當回溯結束時(若問題有序:當遇到不符合條件的樹枝時停下,一種搜索過程的優化)我們就獲得了所有符合條件的樹枝 (答案)。
( 剪掉的部分是末端頂點到離它最近的一個有分叉的點)
回溯經典例子(8皇后問題,略)

最后

參考了CSDN博主 @繁拾簡憶 的博客《回溯和遞歸區別》
博文原鏈@繁拾簡憶《回溯和遞歸區別》

前言描述的題是力扣的 17.電話號碼的字母組合,官方題解用的是哈希表和回溯,后續會更新關于我學習哈希表的內容,整理學到的知識,加油奧利干!
(有不恰當的地方,望各路大佬可以指出來)

總結

以上是生活随笔為你收集整理的回溯和递归的区别(简述)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。