题目:小明妈妈给小明带回来一盒巧克力,(盒子里有n块巧克力,0<n>20)
小明每天可以吃一块巧克力或者两块巧克力。
假设小明每天都吃巧克力,那么小明共有多少种不同的吃巧克力的方案?
那么从题目中可以看出:
当n=1,小明一天吃一块,共一种方案;
当n=2,小明第一天吃一块,第二天吃一块,或者第一天吃两块,共有两种方案;
当n=3,小明第一天吃一块,剩下两块,或者第一天吃两块,剩下一块;
通过以上的规律我们不难得出;
块数 方案(种)
n=1 1
n=2 2
n=3 3
n=4 5
以此类推...当巧克力快数等于n时可以得出以下结论;
f(n)=f(n-1)+f(n-2)
那么我们就可以用递归函数来实现n块巧克力共有多少种方案,代码如下:
#include <stdio.h>
int chifa(int i,int j)
{
int ret=0;//共有多少种方案,初始值为0;
if(i==1)
ret=1;
else if(i==2)
ret=2;
else if(i==3)
ret=3;//通过1,2,3个巧克力方案来找出规律;
else
ret=chifa(i-1,ret)+chifa(i-2,ret);//当有n个巧克力时,用f(n)=f(n-1)+f(n-2)来实现总共的方案数;
//printf("%d",ret);
return ret;
}
int main()
{
int a,ret=0;
printf("请输入巧克力数:");//输入的巧克力数量 ;
scanf("%d",&a);
ret=chifa(a,ret);//调用子函数;
printf("共有 %d 种吃法:",ret);//打印共有多少种吃法;
return 0;
}
递归函数的调用(上题为例),当输入一个n(巧克力数时),通过调用进入子函数,当n>3时,无法输出结果ret,那么他就会一直通过结论的式子减少巧克力数(就是一直调用这个子函数),知道n等于3,2,1时,得到了一个结果,然后它就会开始向上累加,从而得到第n个巧克力时共有多少种方案。