一级递推:
//平面上10条直线最多能把平面分成多少部分
#include<stdio.h>int points(int lines);int main(){int a = points(10) + 10 + 1; //交点对应划分的块数printf("%d\n",a);return 0;}/*输入线数,算出交点数*/int points(int lines){int f[100];int i;f[0]=0;for(i=1;i<=lines;i++){f[i] = f[i-1] + i;}
return f[i-1];}
多阶递推:
// 100个物品,两个玩家a、b轮流从这堆物品中取物,规定每次取的可以是1、3、4、6.最后一次取光者获胜。
//为了获胜,先取还是后取?
间接递推#include<stdio.h>
//n为总物品,返回1表示先取赢,返回0表示先取输
int get(int n)
{
int f[200];
f[0]=f[2]=0;f[1]=f[3]=f[4]=f[6];
for(int i=7;i<=n;i++)
f[i]=!( f[i-1]&&f[i-3]&&f[i-4]&&f[i-6] );
return f[n];
}
int main()
{
if( get(100)== 1)
printf("先取");
else printf("后取");
return 0;
}
//现有四个人做传球游戏,要求接球后马上传给别人。由甲先传球,并作为第一次传球,
//求经过10次传球仍回到甲手中的传球方式的种数
/*
两种传球方式:1:甲 -> *;
2: * ->甲;
*/
#include<stdio.h>
#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];
}
int main()
{
int n=ball(10);
printf("%d种\n",n);
return 0;
}