首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java -使用递归将一个数字与该数的差和3的倍数相加。

Java -使用递归将一个数字与该数的差和3的倍数相加。
EN

Stack Overflow用户
提问于 2016-03-28 22:39:03
回答 2查看 204关注 0票数 2

我正在用代数公式练习在Java中使用递归。

我试图编写一个方法,返回n+(n-3)+(n-6)+(n-9).+ 0的结果。

例如,当n= 7时,结果应该是12。当n= 10时,结果应该是22。

到目前为止,这就是我所拥有的:

代码语言:javascript
复制
public static int sumDownBy3(int n)
{

    if(triSum <= 0)
    {
        return sum;
    }

    sum = n;
    triVar += 3;
    triSum = (n - triVar);

    return sumDownBy3(n + triSum);
}

但是,当我编译和运行它时,它不会返回预期的结果。如何修正此方法以正确应用我试图模拟的公式?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-28 23:21:21

由于这不是一个作业,只是练习,下面是一个基于你问题中的信息的有效解决方案。此解决方案适用于所有n,但是n <= 0将始终返回0

代码语言:javascript
复制
public static int sumDownBy3(int n) {
    if (n <= 0) {
        return 0;
    }

    return n + sumDownBy3(n - 3);
}

这个示例不需要额外的参数或全局/类变量来跟踪和,而只是使用堆栈来跟踪和。这种方法的一个缺点是,对于一个非常非常大的数字,堆栈可能溢出和/或程序可能锁定。

输出:

代码语言:javascript
复制
sumDownBy3(7)  = 12
sumDownBy3(10) = 22
sumDownBy3(9)  = 18

sumDownBy3(10)细分

代码语言:javascript
复制
sumDownBy3(10): 10 !<= 0 -> return 10 + sumDownBy3(10 - 3)
sumDownBy3( 7):  7 !<= 0 -> return  7 + sumDownBy3( 7 - 3)
sumDownBy3( 4):  4 !<= 0 -> return  4 + sumDownBy3( 4 - 3)
sumDownBy3( 1):  1 !<= 0 -> return  1 + sumDownBy3( 1 - 3)
sumDownBy3(-2): -2  <= 0 -> return  0

So 0 + 1 + 4 + 7 + 10 ='s 22
票数 1
EN

Stack Overflow用户

发布于 2016-03-28 22:52:39

所以,这里有一些建议,希望能让你考虑一下奇罗夫松和琼尼·亨利的评论。

你要找的只是:

f(n) = n + f(n-3),n> 0。

递归函数应该只检查n是否为<= 0。如果是,则返回0。否则,使用n-3返回变量n+对函数的另一个调用。

希望这能帮上忙,而不把太多东西送出去。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36272400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档