来点不一样的代码:
def memorize(f): memo = {} def inner(x): if x not in memo: memo[x] = f(x) return memo[x] return inner memo_ti = memorize(lambda x: 0 if x == 0 else 1 if (x == 1 or x == 2) else memo_ti(x - 1) + memo_ti(x - 2) + memo_ti(x - 3)) cases = int(input()) for i in range(cases): print(f'case #0:\n{memo_ti(int(input()))}')
多打了个空格一直报错???
打表就完事
这一题是只能用循环了么? 用记忆递归,开一个数组记录已经算出来的值。
这一题是只能用循环了么? 用记忆递归,开一个数组已经算出来的值。
这题目就是纯模拟了,没任何坑。可以先计算好,输入n直接输出结果(离线计算)
using namespace std; int T,n; int a[40]; void init() { a[0]=0;a[1]=a[2]=1; for(int i=3;i<=39;i++) a[i]=a[i-1]+a[i-2]+a[i-3]; } int main() { init(); cin>>T; for(int step=0;step>n; printf(“case #%d:\n”,step); cout<<a[n]<<endl; } return 0; }
来点不一样的代码:
多打了个空格一直报错???
打表就完事
这一题是只能用循环了么?
用记忆递归,开一个数组记录已经算出来的值。
这一题是只能用循环了么?
用记忆递归,开一个数组已经算出来的值。
这题目就是纯模拟了,没任何坑。可以先计算好,输入n直接输出结果(离线计算)
include
using namespace std;
int T,n;
int a[40];
void init()
{
a[0]=0;a[1]=a[2]=1;
for(int i=3;i<=39;i++) a[i]=a[i-1]+a[i-2]+a[i-3];
}
int main()
{
init();
cin>>T;
for(int step=0;step>n;
printf(“case #%d:\n”,step);
cout<<a[n]<<endl;
}
return 0;
}