2013-05-26 3 views
13

मैं हास्केल में अपने फिबोबाची अनुक्रम कार्यान्वयन के परिणाम देख रहा था जब मुझे संख्याओं के ऑप्टपुट में कुछ "अजीब" रूपों का एहसास हुआ।फिबोनासी सेक। अजीब आउटपुट फॉर्म (हास्केल)

fib :: Integer -> [Integer] 
fib 0 = [0] 
fib 1 = [0, 1] 
fib a = (fib' 0 1 [0,1] 1 a) 

fib' :: Integer -> Integer -> [Integer] -> Integer -> Integer -> [Integer] 
fib' n1 n2 l cont n 
     | cont == n = l 
     | otherwise = (fib' n2 n3 (l++[n3]) (cont+1) n) 
      where n3 = n2 + n1 

मिथ्या 10 की तरह कुछ उत्पादन होगा के लिए:

सबसे पहले, इस हास्केल कोड मैं के साथ आए हैं है [0,1,1,2,3,5, 8,13,21,34,55] फिर मैं फिब 1000 की तरह कुछ कोशिश करना चाहता था, जबकि संख्याएं अविश्वसनीय रूप से बड़ी हैं और सभी ... मैंने जो देखा वह कुछ अजीब elipses "," के बीच मुद्रित किया गया था प्रत्येक पूर्णांक सूची से, उदाहरण के लिए:

example1

तो मैंने maxed अगर यह अजीब पैटर्न अभी भी दोहराने होगा उत्पादन विंडो के आकार को देखने के लिए, और जवाब है हां:

example2

और मेरे सवाल यह है:

किसी को भी क्यों में इस पैटर्न दिखाई देता है पता है " , "सूची से इंटीजर के बीच? क्या यह अधिक यादृच्छिक और कम नहीं होना चाहिए?

+3

यह भी देखें [यह reddit पोस्ट] (http://www.reddit.com/r/haskell/comments/xwfbm/iterate_2_1/)। –

+1

यह [कोडगोल्फ] पर अद्भुत होगा (http://codegolf.stackexchange.com/) – crockeea

उत्तर

21

grow as an exponential functionएन

दशमलव में एक नंबर की लंबाई अनिवार्य रूप से इसकी लघुगणक आधार से 10 इस प्रकार है, एक फाइबोनैचि की लंबाई, के n रैखिक कार्य की तरह बढ़ता है क्योंकि लघुगणक और घातीय एक दूसरे को रद्द।

इस प्रकार, यदि आप उन्हें कॉलम में मुद्रित करते हैं, तो आप एक सीधी रेखा देखेंगे। लेकिन आप उन्हें एक-दूसरे से प्रिंट करते हैं, इसलिए स्थिति जमा होती है। यदि आप एक रैखिक अनुक्रम की संचयी रकम ले रहे हैं, तो आपको एक वर्गबद्ध अनुक्रम मिलता है।

स्थानीय रूप से, प्रत्येक पंक्ति में फिबोनाची संख्याओं की संख्या समान होती है, चलो इसे k पर कॉल करें।

  1. लाइन नंबर रैखिक n के साथ परिवर्तन: यह दो बातें मतलब है।
  2. अल्पविराम (खिड़की के बाएं किनारे के सापेक्ष) के वास्तविक पदों की गणना करने के लिए, हमें शेष लंबाई "पूर्ण स्थिति" मॉड्यूलो लाइन लंबाई की आवश्यकता है। यह 1/kn की प्रत्येक वृद्धि के प्रति बराबर (औसत पर) बराबर है। यह समायोजन रैखिक है और स्थिति के वर्गबद्ध व्यवहार को नहीं बदलता है।

तो आप जो देख रहे हैं वह एक पैराबोल है - एक वर्गबद्ध कार्य का ग्राफ।

+0

बहुत समझ में आता है, thanx! –

3

जब आप इसके बारे में सोचने के लिए आते हैं तो कुछ भी अजीब बात नहीं है। पड़ोसी फाइबोनैकी संख्याओं की समान लंबाई होती है, और लंबाई अनुक्रम के साथ बढ़ रही है। तो मान लें कि आपके एक 30 चरित्र स्क्रीन आकार है, और अपने वर्तमान F(n) 29 अंक है, तो अगले कई संख्या के लिए, लंबाई हो सकता है:

29, 29, 29, 30, 30, 30, 31, 31, 31 

जो तुम छोड़ दिया है देता है -> स्थिर -> सही आंदोलन ।

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