這是以前寫的代碼,好久沒看,忘了當初是怎麼寫出這個公式來的了。。由此可見寫解題報告的重要性啊!哪怕寫個註釋也好呀。
#include<iostream>
#include <stdio.h>
using namespace std;
int main()
{
int n, i, k, j;
double a, b;
while (cin>>n)
{
k = n / 2;
b = 0;
for (i=0; i<=k; i++)
{
a = 1;
for (j=0; j<i; j++)
{
a *= ((n -2 *i +1 +j)* 1.0 /(j +1));
}
b += a;
}
printf("%.0f\n", b);
}
}
不過剛剛想了下,想到了另一種遞歸的方法。
從大概中間的那個位置切開,
公式如下:
F(n/2) * F(n/2) + F(n/2-1) * F(n/2-1) (當n爲偶數時)
F(n) = {
F(n/2) * F(n/2-1) * 2 + F(n/2) * F(n/2) (當n爲奇數時)
PS:n/2爲計算機上的n/2。