gpt4 book ai didi

c - 我们如何在 C 中使用递归打印系列 1+ 11 +111+........ 最多 N 项的总和

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:29:13 24 4
gpt4 key购买 nike

我一直尝试使用递归打印这个系列的总和,但最终只返回了它的第 n 个项。我知道如何使用迭代打印系列的总和,但使用递归打印它的总和对我来说太难了。

经过深思熟虑,我将此作为最终代码。

#include <stdio.h>
int sumseries(int);
int main()
{
int n;
printf("Enter the number: ");
scanf("%d",&n);
printf("The sum of the series is %d",sumseries(n));
}
int sumseries(int n)
{
int i,sum=0;
if(n==1)
return 1;
for(i=0;i<n;i++)
sum=sum*10+1;
return (sum+sumseries(n-1));
}

你能在不使用 for 循环的情况下帮我解决这个问题吗?

预先感谢您的回答!

最佳答案

那么,如果您手动执行此操作,您会怎么做?

好吧,您可能会手写每个术语:

1 + 11 + 111 + 1111 + 11111 + 111111

然后您将开始求和:1 + 11 = 1212 + 111 = 123123 + 1111 = 1234

当然,你也可以逆向求和:111111 + 11111 = 122222122222 + 1111 = 123333,等等

为了用递归解决这个问题,您需要仔细规划函数返回的内容及其参数。

在这个问题中,您需要计算两件事:实际的级数项(1、11、111、1111 等)和这些项的总和。正如您的函数名称所表明的那样,您希望 sumseries 返回该系列的总和。

现在,您似乎已经掌握了从当前项创建下一项的方法(乘以 10 并加 1),但这对递归没有帮助。

但是,如果您有办法将“当前项”添加到“其余部分的总和”,那么您将朝着递归解决方案迈进。

那么,如果您的函数采用两个参数会怎么样:一个 n 表示要写入多少个术语,一个 current_term 变量表示当前术语?

然后你可以在你的部分功能中这样做:

next_term = 10 * current_term + 1
return current_term + sumseries(n-1, next_term);

事实上,这就是它的核心:

int sumseries(int n, int current_term)
{
if(n==1)
return current_term;
next_term = 10 * current_term + 1
return current_term + sumseries(n-1, next_term);
}

然后将 main 中的调用更改为 sumseries(n, 1) 而不仅仅是 sumseries(n)

关于c - 我们如何在 C 中使用递归打印系列 1+ 11 +111+........ 最多 N 项的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49464402/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com