Chương trình đang thảo luận cố gắng tính sum-of-first-n-natural-numbers
sử dụng recursion
. Tôi biết điều này có thể được thực hiện bằng cách sử dụng một công thức đơn giản n*(n+1)/2
nhưng ý tưởng ở đây là sử dụng recursion
. chương trìnhCó giới hạn cứng nào về độ sâu đệ quy trong C
là như sau: Chương trình
#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;
}
Các làm việc tốt cho n = 100,000
nhưng khi giá trị của n
được tăng lên 1,000,000
nó dẫn đến một Segmentation fault (core dumped)
Sau đây được lấy từ thông điệp gdb
.
Program received signal SIGSEGV, Segmentation fault.
0x00000000004004cc in add (n=Cannot access memory at address 0x7fffff7feff8
) at k.c:4
Câu hỏi của tôi (s):
Có bất kỳ giới hạn cứng có dây vào
recursion depth
trongC
? hoặc khôngrecursion depth
phụ thuộc vào bộ nhớ ngăn xếp có sẵn?Lý do có thể khiến một chương trình nhận được tín hiệu reSIGSEGV là gì?
cho hai câu hỏi, xin vui lòng gửi hai câu hỏi. Câu hỏi 1 có thể trùng lặp http://stackoverflow.com/q/2630054/1025391 – moooeeeep