में रिकर्सन गहराई पर कोई हार्ड-वायर्ड सीमा है, चर्चा के तहत कार्यक्रम recursion
का उपयोग करके sum-of-first-n-natural-numbers
की गणना करने का प्रयास करता है। मुझे पता है कि यह एक साधारण सूत्र n*(n+1)/2
का उपयोग करके किया जा सकता है लेकिन यहां विचार recursion
का उपयोग करना है।क्या सी
#include <stdio.h>
unsigned long int add(unsigned long int n)
{
return (n == 0) ? 0 : n + add(n-1);
}
int main()
{
printf("result : %lu \n", add(1000000));
return 0;
}
कार्यक्रम n = 100,000
के लिए अच्छी तरह से काम, लेकिन जब n
का मूल्य 1,000,000
लिए बढ़ा दिया गया था कि यह एक Segmentation fault (core dumped)
के परिणामस्वरूप निम्नलिखित gdb
संदेश से लिया गया है:
कार्यक्रम इस प्रकार है ।
Program received signal SIGSEGV, Segmentation fault.
0x00000000004004cc in add (n=Cannot access memory at address 0x7fffff7feff8
) at k.c:4
मेरा प्रश्न (ओं):
वहाँ
C
मेंrecursion depth
पर किसी भी कड़ी मेहनत से तार सीमा है? याrecursion depth
उपलब्ध स्टैक मेमोरी पर निर्भर करता है?किसी प्रोग्राम को रीसाइजजीवी सिग्नल क्यों प्राप्त होगा, इसके संभावित कारण क्या हैं?
, दो प्रश्न पोस्ट करें। प्रश्न 1 शायद डुप्लिकेट http://stackoverflow.com/q/2630054/1025391 – moooeeeep