मैं गणना पर एक पुस्तक (मैन्सी 1 9 67) पर अपना काम कर रहा हूं और लूप के संदर्भ में परिभाषित एक फ़ंक्शन में रिकर्सिव फ़ंक्शन से संबंधित कठिन समय ले रहा हूं।एकरमेन फ़ंक्शन बनाम एन नेस्टेड लूप
एकरमैन समारोह (अजगर के सारे कोड):
def a(n,m):
if n==0:
return m+1
if m==0:
return a(n-1,1)
return a(n-1,a(n,m-1))
और एक समारोह है कि n नेस्टेड छोरों के साथ गणना करता है:
def p(n,m):
for i_1 in range(m):
for i_2 in range(m):
...
for i_n in range(m):
m+=1
एक विशेष रूप से वह दो कार्यों के बीच संबंधों को खोजने के लिए पूछता है इसे लिखने का एक पुनरावर्ती तरीका (एक लूप के साथ) है:
def p(n,m):
if n==0:
return m+1
for i in range(m):
m=p(n-1,m)
return m
या पूरी तरह से रिकर्स लिखने के लिए ive तरीका यह होगा:
def p(n,m):
return P(n,m,m)
def P(n,k,m):
if n==0:
return m+1
if k==1:
return P(n-1,m,m)
m=P(n,k-1,m)
return P(n-1,m,m)
क्या इन दो कार्यों से संबंधित कुछ आसान तरीका है? मुझे लगता है कि मैं एक कोहरे में चारों ओर घूम रहा हूं - किसी भी अंतर्दृष्टि में आप मुझे इस तरह की समस्याओं के साथ कैसे पहुंच सकते हैं, इसकी सराहना की जाएगी। साथ ही, तीसरे पैरामीटर के परिचय के बिना पूरी तरह से रिकर्सिव लूप फ़ंक्शन को लागू करने का कोई तरीका है? धन्यवाद।
पहले कोड स्निपेट में आपके पास लगातार दो 'वापसी' है - एक टाइपो? – eumiro
@ यूमिरो, दूसरी वापसी वह मामला है जब एम! = 0 और एन! = 0 –
@ पॉल, ठीक है, धन्यवाद, मैंने कोड इंडेंटिंग तय की है। – eumiro