遞迴,怎麼理解這個概念?我們不需要用複雜的語言來描述這個概念,只需要從這個詞的本意入手即可。遞迴的英文也就是recursion,這個詞的詞源是recur,我們都知道occur的意思是發生,那麼recur的意思也就不難理解了,也就是重**生。所以說,遞迴,就是指乙個事情週期性重**生,也就是說,在乙個演算法裡,如果乙個方法被重複呼叫,那麼這個方法就有可能是遞迴的。
那麼怎麼判斷乙個問題是否能用遞迴的方法來解?這可以從三方面去考慮。
1. 這個問題的定義是不是遞迴的?
比較典型的就是fibonacci數列和階乘問題,這兩個問題本身都包含了遞迴的過程,因此很容易判斷出可以用遞迴法去解。
2. 資料本身是不是遞迴的?
這類情況中,比較典型的是鍊錶和二叉樹。判斷乙個資料是不是遞迴結構,關鍵點在於區域性資料和全域性資料的結構是不是一樣的,拿單向鍊錶來說,每乙個節點都有乙個資料,乙個指向它的指標和乙個指向下乙個節點的指標,而整個鍊錶也是這種結構,因此鍊錶是遞迴結構。而對於二叉樹則是乙個道理,二叉樹的任意一棵子樹都和它本身具備相同的結構。因此,操作這類資料都可以選擇遞迴。
3. 問題的解法是不是遞迴的?
這種情況稍難判斷一點,需要程式設計師在自己的腦中模擬一下問題的解決過程,從而找出遞迴關係。最經典的例子莫過於漢諾塔,在移動盤子的過程中,每一次移動底層盤子,都需要把上層的盤子移開,而每次移動的方法又都是相同的,因此是比較典型的遞迴問題。
在各種演算法教材上幾乎都把遞迴作為第乙個介紹的演算法,但是個人認為遞迴其實並不是那麼好理解,想正確的判斷出遞迴,並且應用遞迴,是需要大量練習的。
判斷乙個變數是不是陣列
rt 判斷乙個變數 arr 是不是陣列 function isarray arr instanceof在哪些情況下會有問題?為什麼?var str str console.log str instanceof string false console.log typeof str string看上面...
怎麼判斷乙個js物件是不是Array型別?
對於function string,number,undefined等幾種資料型別的物件來說,typeof完全可以判斷出來,但是為array的時候 var arr newarray 1 2 3 4 alert typeof arr object你會收到乙個object的答案,有點讓人失望。insta...
JavaScript如何判斷乙個值是不是數字
第一種方法 isnan 使用js自帶全域性函式isnan isnan 返回乙個boolean值,如下 var c hello 字串 isnan c 返回乙個true var c 10 數字 isnan c 返回乙個false 如果以上c為乙個空串或是乙個空格,isnan將把c當作數字0來處理,所以檢...