题目如下:
题目背景
老Q在小Q等人的帮助下,写出了全排列代码,他异常兴奋,于是写了一个公式。 f(n)=max(f(n-3),f(n-1)+f(n-2)); 他知道f(1)=1/2,f(2)=1/4,f(3)=1/8,那么f(n)=?
注:f(0)=0
题目描述
通过数组求解问题。(详细内容见题目背景)
输入格式
输入一个正整数n。
输出格式
输出一个数,f( n )。
输入输出样例
输入 #1复制
10
输出 #1复制
7.5
说明/提示
对于20%的数据,n<=5
对于40%的数据,n<=25
对于100%的数据,n<=60
由于我自学的递归,代码出了点问题,如下```c
#include<bits/stdc++.h>
using namespace std;
double sum;
void f(int n) {
if (n == 1) {
sum += 0.5;
return ;
} else if (n == 2) {
sum += 0.25;
return ;
} else if (n == 3) {
sum += 0.125;
return ;
} else {
sum = sum + max(f(n - 3), (f(n - 1) + f(n - 2)));//这行是无效表达式
return ;
}
}
int main () {
int n;
cin >> n;
f(n);
cout << sum;
return 0;
}
有大佬能给我附上代码吗