求N分之一序列前N项和
本题要求编写程序,计算序列 1 + 1/2 + 1/3 + … 的前N项之和
个人想到可以用for循环和递归两种方法实现
for循环:
#include<stdio.h>
double sum(int n){
int i=1;
double x;
for (;i<=n;i++){
x += 1.0/i;
/*除号左右两边有一个是浮点型,就会转换成浮点型*/
}
return x;
}
int main()
{
int n;
scanf("%d",&n);
printf("%.6f",sum(n));
return 0;
}
递归实现:
#include<stdio.h>
double sum(int n){
if(n>=1)
return 1.0/n+sum(n*1.0-1);
}
int main()
{
int n;
scanf("%d",&n);
printf("%.6f",sum(n));
return 0;
}
进阶:偶数项为负,求N分之一序列前N项和
计算序列 1 -1/2 + 1/3 - … 的前N项之和
汗颜,下面是我想到的愚夫代码
double sum(int n){
int i=1;
double x;
for (;i<=n;i++){
x += i%2==0?-1.0/i:1.0/i;
/*这种方法好像被叫做嵌入式赋值,是不被允许的但是
思路是这样,判断一下奇偶再加*/
}
return x;
}
翁老师的方法
看到这里我感觉自己是个若治。。。
double sum(int n){
int i=1;
double x;
double sign = 1.0;
/*这里定义了一个sign,初值为1.0,循环每次反向*/
for (;i<=n;i++){
x += sign/i;
sign = -sign;
/*偶数项反向,变成-1.0*/
}
return x;
}
总结
多看看别人的代码,温故知新~💪