递归

一级递推:

//平面上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;

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值