python经典百题之前N项和

题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+…+1/n,当输入n为奇数时,调用函数1/1+1/3+…+1/n

程序分析

我们需要编写一个函数,根据输入的n的奇偶性分别计算不同的求和。对于偶数n,计算1/2+1/4+…+1/n;对于奇数n,计算1/1+1/3+…+1/n。

方法1:使用循环计算求和

解题思路

  • 使用循环计算不同情况下的求和。

代码实现

def calculate_sum(n):
    if n % 2 == 0:
        # Calculate 1/2 + 1/4 + ... + 1/n
        total_sum = 0
        for i in range(2, n + 1, 2):
            total_sum += 1 / i
        return total_sum
    else:
        # Calculate 1/1 + 1/3 + ... + 1/n
        total_sum = 0
        for i in range(1, n + 1, 2):
            total_sum += 1 / i
        return total_sum

# Example usage
n = 6
result = calculate_sum(n)
print(f"The sum for n={n} is: {result}")

优缺点

  • 优点:
    • 简单、直接,易于理解和实现。
  • 缺点:
    • 时间复杂度较高,为O(n)。

方法2:使用递归计算求和

解题思路

  • 使用递归计算不同情况下的求和。

代码实现

def calculate_sum_recursive(n):
    if n == 1:
        return 1
    elif n % 2 == 0:
        return 1 / n + calculate_sum_recursive(n - 2)
    else:
        return 1 / n + calculate_sum_recursive(n - 2)

# Example usage
n = 6
result = calculate_sum_recursive(n)
print(f"The sum for n={n} is: {result}")

优缺点

  • 优点:
    • 使用递归思路清晰。
  • 缺点:
    • 可能在大规模n下会导致栈溢出,不适用于极大的n。

方法3:数学运算优化求和

解题思路

  • 使用数学运算进行优化,避免循环或递归。

代码实现

def calculate_sum_optimized(n):
    total_sum = 0
    if n % 2 == 0:
        for i in range(2, n + 1, 2):
            total_sum += 1 / i
    else:
        for i in range(1, n + 1, 2):
            total_sum += 1 / i
    return total_sum

# Example usage
n = 6
result = calculate_sum_optimized(n)
print(f"The sum for n={n} is: {result}")

优缺点

  • 优点:
    • 使用数学运算进行优化,效率较高。
  • 缺点:
    • 相对复杂一些。

总结和推荐

  • 推荐方法3(数学运算优化求和)
    • 效率较高,不需要额外空间。

综上所述,推荐使用方法3来求解题目。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

忧伤的玩不起

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值