【数列】求序列之和——递归

【数列】求序列之和——递归

请使用递归算法求下列序列的前n项之和。
1 + 1/2 - 1/3 + 1/4 -1/5 ......

输入:

n

输出:

1 + ∑ m = 2 n ( − 1 ) m m − 1 1 + \sum_{m=2}^{n} {(-1)^m m^{-1}} 1+m=2n(1)mm1

样例:

序号测试输入期待的输出额外进程
11↵1↵0
22↵1.500000↵0
33↵1.166667↵0

思路

首先假设我们有递归函数F(n)返回值为 1 + ∑ m = 2 n ( − 1 ) m m − 1 1 + \sum_{m=2}^{n} {(-1)^m m^{-1}} 1+m=2n(1)mm1
然后观察F(n)和F(n+1)的关系:
F ( n ) = { = 1 , 当 n = 1 = F ( n − 1 ) + 1 n , 当 n % 2 = = 0 = F ( n − 1 ) − 1 n , 当 n % 2 ! = 0 F(n)=\left\{\begin{matrix} =1,当 n=1\\ \\ =F(n-1)+\frac{1}{n},当n\%2==0\\ \\ =F(n-1)-\frac{1}{n},当n\%2!=0 \end{matrix}\right. F(n)= =1,n=1=F(n1)+n1,n%2==0=F(n1)n1,n%2!=0

代码

#include <stdio.h>  

double Sum(double n)
{
    if (n == 1)
        return 1;
    else if (n % 2 == 0)
        return 1 / n + Sum(n - 1);
    else if (n % 2 == 1)
        return -1 / n + Sum(n - 1);
}

int main()
{
    double n;
    scanf("%lf", &n);
    getchar();
    double y = Sum(n);
    if (y == (int)y)
        printf("%d\n", (int)y);
    else
        printf("%f\n", y);
    return 0;
}
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值