J. 简单递归
Posted sjchen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了J. 简单递归相关的知识,希望对你有一定的参考价值。
题目链接:https://www.hpuoj.com/contest/16/problem/J/
单测试点时限: 1.0 秒
内存限制: 512 MB
这是一段 C/C++ 代码,用于计算递推数列 ???? 的。
const int MOD = (int)1e9 + 7;
int a(int n) {
if(n < 3) return 1;
return ((a(n - 1) << 1) % MOD + (a(n - 2) >> 1)) % MOD;
}
现在请根据这段代码输出第 ?? 项数列的值 ???? 。
输入
第一行一个整数 ??。
之后的 ?? 行,每行 1 个整数,表示 ?? 。
0<??≤105, 0<??≤106 。
输出
每一行请输出一个 ???? 的值
input
3 1 2 3
output
1 1 2
解题思路:把递归变成非递归,用数组保存就好了。然后预处理一下
#include <iostream> #include <cstring> #include <algorithm> #include <cstdio> using namespace std; #define ll long long #define maxn 1000000+10 ll k[maxn]; const int MOD = (int)1e9 + 7; void init() { for (int i =0; i < 3; i++) { k[i] = 1; } for (int i = 3; i < maxn; i++) { k[i] = ((k[i-1]<<1 )%MOD+ (k[i-2]>>1)%MOD)%MOD; } } int main() { init(); ll t,n; cin >> t; while (t--) { cin >> n; printf("%lld\n",k[n]); } return 0; }
以上是关于J. 简单递归的主要内容,如果未能解决你的问题,请参考以下文章
简单翻译 Piccirillo J. 博士的《 The Art and Science of Selecting Robot Motors》
2018ECfinal J. Philosophical Balance