2011-08-15 8 views
8

मैं पुनरावर्ती क्रिया के बारे में इतने पर अन्य प्रश्न देखा है और मैं प्रतिक्रियाओं पढ़ा है लेकिन मैं अभी भी एल्गोरिथ्म मेरे सिर में क्लिक करने के लिए नहीं मिल सकता हैटॉवर अच्छा पार्ट्स

var hanoi = function (disc, src, aux, dst) { 

    if (disc > 0) { 
    hanoi(disc - 1, src, dst, aux); 
    document.write('Move disc ' + disc + ' from ' + src + ' to ' + dst); 
    hanoi(disc - 1, aux, src, dst); 
    } 
} 

hanoi(3, 'Src', 'Aux', 'Dst'); 

document.write (...), कभी भी कैसे चलाता है। मेरा तर्क पहली बार है जब हम फ़ंक्शन डिस्क चलाते हैं> 3. फिर हम फ़ंक्शन को फिर से नीचे सबकुछ छोड़कर फ़ंक्शन को कॉल करते हैं, तो दस्तावेज़.write को चलाने का मौका मिलता है?

मैं रिकर्सन (मूल उदाहरणों को पूरा करता हूं) समझता हूं लेकिन मैं अभी भी यह नहीं देख सकता कि आपको आउटपुट कैसे प्राप्त होता है। यदि कोई तरीका है तो मैं इसे दृष्टि से चला सकता हूं और इसे क्रिया में देख सकता हूं, जो बहुत मदद करेगा।

उत्तर

21

आप क्या एक फोन पेड़ के रूप में क्या होगा के बारे में सोच सकते हैं (समय ऊपर से नीचे तक ले जाता है):

hanoi(3, ...) => 
|-> hanoi(2, ...) => 
| |-> hanoi(1, ...) => 
| | |-> hanoi(0, ...) => 
| | | \-> (does nothing) 
| | |-> document.write(...) 
| | |-> hanoi(0, ...) => 
| | | \-> (does nothing) 
| | <-/ [hanoi(1, ...) finished] 
| |-> document.write(...) 
| |-> hanoi(1, ...) => 
| | |-> hanoi(0, ...) => 
| | | \-> (does nothing) 
| | |-> document.write(...) 
| | |-> hanoi(0, ...) => 
| | | \-> (does nothing) 
| | <-/ [hanoi(1, ...) finished] 
| <-/ [hanoi(2, ...) finished] 
|-> document.write(...) [halfway done!] 
|-> hanoi(2, ...) => 
| \-> [same pattern as the first time, with different data] 
\-> [hanoi(3, ...) finished] 
+0

+1 के बारे में मैं एक ही बात लिखने के लिए गया था, लेकिन तुम्हारा अधिक पठनीय है। मुझे लगता है कि कुंजी, प्रत्येक 'हनोई() 'के बारे में सोचना नहीं है, बल्कि' गोटो 'के रूप में बल्कि पिछले' हनोई()' के उप-सूटिन के रूप में सोचना है। उस अर्थ में, इसमें 'डिस्क' 0 पर जाती है, लेकिन इसमें अभी भी तीन 'हनोई खुली है, और वे दौड़ना जारी रखेंगे। "एनी बॉब के पत्तों के बाद जाने जा रही है, जो सिंडी पत्तियों के बाद छोड़ती है, जो डौग के पत्तों के बाद छोड़ती है" या कुछ ऐसे। – brymck

संबंधित मुद्दे