C_I*_*ner 1 c recursion segmentation-fault
我想知道在以下程序中导致分段错误的原因.我认为在递归过程中会发生分段错误.输入数字后,出现错误消息"发生访问分段错误".
这是代码:
#include <stdio.h>
#include "simpio.h"
int sum(int n);
main()
{
int n, Sum;
printf("Please enter the amount of elements in sequence n/n+1: ");
printf("LOL1\n");
n=GetInteger();
Sum=sum(n);
printf("LOL2\n");
printf("The sum of the first %d elements of the sequence n/n+1 is: %d", n, Sum);
printf("LOL3\n");
getchar();
}
int sum(int n)
{
if(n=0) return(0);
else return((sum(n-1))+(n/(n+1)));
}
Run Code Online (Sandbox Code Playgroud)
这个功能:
int sum(int n)
{
return (n = 0) ? 0 : (sum(n - 1)) + (n / (n + 1));
}
Run Code Online (Sandbox Code Playgroud)
是一个无限循环,在每次迭代时占用堆栈空间,直到它耗尽内存.你真的是指(n == 0)这里.修复之后,您将意识到对于整数,(n / (n + 1))总是为0,因此函数将起作用但始终返回0.
你根本不需要递归,但你需要使用除整数之外的东西来使该分区有意义.
赋值表达式(n = 0)永远不会成立:它是赋值,而不是比较.这就是为什么你的递归会持续到你的程序溢出堆栈为止的原因.
您需要更改(n = 0)为(n == 0)或C的习惯!n,这意味着同样的事情.
另请注意,执行整数除法:n/(n+1)使用整数时始终为零.您需要切换到float或double获得非零结果.