c - 处理 sqrt (2) 的连续分数表示的分子的序列的递归函数
问题描述
我试图开发一个递归函数来找到序列的第 n 项(1,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
循环,因为现在它只是一个尾递归函数。
推荐阅读
- python - 来自私人 github repo 的 pip install wheel 版本
- desktop-application - 阻止屏幕录制应用程序
- .net - 在正在运行的应用程序中确定 .net 框架版本
- python - 如何限制 Python oneliner 中 for 语句的范围?
- python - 需要帮助替换python中的单词前缀
- python - DRF 一对多序列化——缺少字段的 AttributeError
- javascript - Javascript 中的更新函数
- moleculer - 分子在日期格式上添加验证规则
- python - Python 中的简单 HTTP 服务器。如何获取文件?
- selenium - 控制台日志记录 - Selenium 和 Katalon