请使用递归算法求下列序列的前n项之和。 1 + 1/2 - 1/3 + 1/4 -1/5 ...... 输入: n 输出: 序列的前n项和(精确到小数点之后第6位) 1. #include\ 2. int main() 3. {int n; 4. double SUM(int); 5. scanf(\,&n); 6. n==1?printf(\):printf(\,SUM(n)); 7. return 0; 8. } 9. double SUM(int n) 10. {if(n==2) return 1+1.0/n; 11. else if(n%2) return -1.0/n+SUM(n-1); 12. else return SUM(n-1)+1.0/n; 13. }
时间: 2024-02-02 20:03:29 浏览: 94
用递归求1+2+3+...+n的程序
这段代码使用了递归算法来计算序列的前n项之和。具体思路是:当n等于2时,直接返回1+1/n;当n为奇数时,返回-SUM(n-1)/n;当n为偶数时,返回SUM(n-1)+1/n。其中,SUM函数是递归调用自身来计算前n项之和的。
代码如下:
```c
#include <stdio.h>
double SUM(int n);
int main()
{
int n;
scanf("%d", &n);
if (n == 1)
printf("1.000000");
else
printf("%.6f", SUM(n));
return 0;
}
double SUM(int n)
{
if (n == 2)
return 1 + 1.0 / n;
else if (n % 2)
return -1.0 / n + SUM(n - 1);
else
return SUM(n - 1) + 1.0 / n;
}
```
注意,递归算法的缺点是容易造成栈溢出,因此递归调用的层数不宜过多。可以通过改写为循环算法或者优化递归算法来减少层数,提高效率。
阅读全文