如何解决用于处理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 举报,一经查实,本站将立刻删除。