2013-11-28 4 views
5

मैं एक रिकर्सिव फ़ंक्शन लिखने की कोशिश कर रहा हूं, लेकिन लाइन में त्रुटि प्राप्त करें: n + sum (n-1); मेरा कंपाइलर जर्मन है, इसलिए त्रुटि संदेश का एक खराब अनुवाद होगा: "शून्य मान को मानने के रूप में अनदेखा नहीं किया गया"। मदद के लिए धन्यवाद!एक पुनरावर्ती समारोह में एक त्रुटि को समझना?

void sum (int n) 
{ 
    if(n==0) 
    { 
     cout << n << endl; 
    } 
    else if(n>0) 
    { 
     n + sum(n-1); 
     cout << n << endl; 
    } 
} 

int main() 
{ 
    sum(3); 
    return 0; 
} 
+0

आप 'void' कार्यों से मान वापस नहीं लौट सकते और उनसे वापसी मूल्य नहीं मिल सकता है। –

+0

ऐसा इसलिए है क्योंकि वह रेखा कुछ भी नहीं करती है। –

+0

यह एक बहुत अच्छा अनुवाद है, और यह सही है। आपको किसी फ़ंक्शन के रिटर्न वैल्यू को अनदेखा करना (उपयोग नहीं करना) है जो शून्य लौटाता है। – rici

उत्तर

3

अपने योग विधि शून्य देता है, यह

int sum (int n) 
1

आप n और योग को जोड़ने का प्रयास int करने के लिए बदल (n-1), लेकिन राशि नहीं दिया गया मान है, तो यह एक त्रुटि है। आपको एक int वापस करने के लिए योग को संशोधित करना चाहिए, और यदि शरीर में दो में वापसी विवरण जोड़ना चाहिए।

1

जब आपने "शून्य राशि" लिखा था तो आपने संकलक को बताया कि योग कुछ भी वापस नहीं करेगा। ये गलत है। Int के साथ "शून्य" को बदलने का प्रयास करें।

5

सूचना है कि आप के रूप में

void sum (int n); 

समारोह परिभाषित किया है यह फ़ंक्शन कोई वापसी मूल्य है। हालांकि, इस कोड में:

n + sum(n-1); 

आप sum(n - 1) की वापसी मूल्य है, जो वैध नहीं है क्योंकि sum(n - 1) एक मूल्य का उत्पादन नहीं करता करने के लिए n जोड़ने की कोशिश कर रहे हैं।

इसे ठीक करने के लिए, शायद आप फ़ंक्शन को बदलना चाहेंगे ताकि यह int लौटा सके। यदि आप ऐसा करते हैं, तो आपको फ़ंक्शन में वापसी विवरण जोड़ने जैसे अन्य परिवर्तन करने की आवश्यकता होगी, लेकिन इसे आपको सही रास्ते पर लाने में मदद करनी चाहिए।

आशा है कि इससे मदद मिलती है!

2

आपकी राशि() विधि को एक मूल्य वापस करना चाहिए, इसे राशि वापस करनी चाहिए। आपको इसे

int sum (int n) 
{ 
if(n==0) 
{ 
cout << n << endl; 
return 0; 
} 
else if(n>0) 
{ 
    cout << n << endl; 
    return n + sum(n-1); 
} 
} 
+0

आपको तनाव देना है कि 'एन + योग (एन -1);' गणना समय को छोड़कर कुछ भी नहीं करता है। मुझे लगता है कि आपका उदाहरण वास्तव में भ्रामक है। – Johan

+0

धन्यवाद, मैंने बेकार रेखा – slecorne

0

मुझे यह परिभाषित करना चाहिए। मुझसे थोड़ी बेवकूफ थी। यह निश्चित रूप से होना चाहिए n = n + sum (n-1); और एक int फ़ंक्शन। धन्यवाद दोस्तों।

+1

को हटाने के लिए उत्तर संपादित किया है कृपया उत्तर के रूप में टिप्पणी न लिखें।सुनिश्चित करें कि आप उन उत्तरों (ओं) पर वोट दें जो आपकी मदद करते हैं, और सबसे उपयोगी स्वीकार करते हैं। – paddy

+0

ठीक है। क्षमा करें, इसका उपयोग करना होगा;) – Julius

+0

कोई समस्या नहीं है। इस वेबसाइट पर हैंडल पाने का सबसे अच्छा तरीका यह है कि इसे पढ़ना: http://stackoverflow.com/about – paddy

0
  • एक पुनरावर्ती समारोह प्रत्येक पूंछ की स्थिति में कुछ वापस जाने के लिए की जरूरत है।
  • एक पुनरावर्ती कार्य को प्रत्येक रिकर्सन में समस्या को कम करने की आवश्यकता है।

यहाँ यह कैसे करना है का एक उदाहरण है:

int sum (int n) 
{ 
    return n == 1 ? 1 : n + sum_rec(n-1); 
} 

int main() 
{ 
    cout << sum(3) << endl; 
    return 0; 
} 

एक बेहतर एक अगर तुम सी संकलक करता पूंछ कॉल अनुकूलन:

// just a helper for sum_it 
int sum_aux (int n, int accumulator) 
{ 
    return n == 0 ? accumulator : sum_rec(n-1, accumulator + n); 
} 

int sum_it (int n) 
{ 
    sum_aux(n, 0); 
} 
संबंधित मुद्दे