微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用于处理sqrt的连续分数表示的分子的序列的递归函数2

如何解决用于处理sqrt的连续分数表示的分子的序列的递归函数2

我试图开发一个递归函数来查找序列的第n个项(1、3、7、17、41、99、239、577、1393 ...),但是我没有成功:

int progRec(int n){
        return 2*progRec(n-1) + progRec(n-2);}

有什么想法吗?

解决方法

添加停止条件。我认为它是1 if n <= 2

int progRec(int n) {
    if (n <= 2) {
        return 1;
    }
    return 2 * progRec(n - 1) + progRec(n - 2);
}

您可以通过消除第二个分支(仅重新计算已访问的值)来优化此递归。只需将先前计算的条件作为参数传递即可:

int progRec(int n,int val = 1,int prev = 1) {
    return n <= 2 ? val : progRec(n - 1,2 * val + prev,val);
}

您可以将其进一步优化为for循环,因为现在它只是一个尾递归函数。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。