递推与递归
Fibonacci
#include<stdio.h>
#pragma warning (disabled:4996)
#define MAX 100
int f[MAX];//对应递推公式的数据区
int fib(int n)
{
int i;
f[0]=f[1]=1;
for(i=2;i<n;i++)
{
f[i]=f[i-1]+f[i-2];
}
return f[n];
}
void main()
{
int res[10];
fib(10);
for(int i=1;i<10;i++)
{
printf("%d\n",f[i]);
}
}
平面划分问题
#include<stdio.h>
#pragma warning (disabled:4996)
#define MAX 100
int f[MAX];//对应递推公式的数据区
int lines(int n)
{
int i;
f[0]=1;
for(i=1;i<n;i++)
{
f[i]=f[i-1]+i;
}
return f[n];
}
void main()
{
int res[10];
lines(10);
for(int i=1;i<10;i++)
{
printf("%d\n",f[i]);
}
}
博弈问题
#include<stdio.h>
#pragma warning (disabled:4996)
#define MAX 100
int f[MAX];//对应递推公式的数据区
int games(int n)
{
int i;
f[0]=0;
f[1]=f[3]=f[4]=f[6]=1;
f[2]=0;
f[5]=1;
for(i=7;i<n;i++)
{
f[i]=!(f[i-1]&&f[i-3]&&f[i-4]&&f[i-6]);
}
return f[n];
}
void main()
{
int res[20];
games(20);
for(int i=1;i<20;i++)
{
printf("%d\n",f[i]);
}
}
result
传球问题
#include<stdio.h>
#pragma warning (disabled:4996)
#define MAX 100
int f[MAX];//对应递推公式的数据区
int g[MAX];
int ball(int n)
{
int i;
f[1]=0;
g[1]=1;
for(i=2;i<=n;i++)
{
f[i]=3*g[i-1];
g[i]=f[i-1]+2*g[i-1];
}
return f[n];
}
void main()
{
int res[20];
ball(20);
for(int i=1;i<20;i++)
{
printf("%d\n",f[i]);
}
}
台阶上法问题(Fibonacci数列)
#include<stdio.h>
#define MAX 100
int f[MAX];
int stairs(int n){
int i;
f[0]=1;f[1]=2;
for(int i=2;i<=n;i++)
{
f[i]=f[i-1]+f[i-2];
}
return f[n-1];
}
int main()
{
int n;
scanf("%d",&n);
printf("%d",stairs(n));
return 1;
}