1.猴子吃桃:某天摘若干个,当天吃掉一半,又多吃一个,重复到第8天时只剩下一个桃子了
分析:
设f(x)为每天还剩的桃子个数;题目中说到第8天时只剩下一个,则f(8)=1,同时从题目中可知猴子每天吃掉一半,又多吃了一个,因此f(8)=f(7)/2-1;据此可写出函数:f(x)=f(x-1)/2-1;f(x)=2*f(x+1)+1,f(8)=1
(1).利用递归,可推出公式f(n)=2*f(n+1)+1,f(8)=1
int tao(int n) {
//f(n)=2*f(n+1)+1,f(8)=1;
if (n == 8)
return 1;
return 2 * (tao(n + 1) + 1);
}
打印结果:
void peach() {
//打印结果
猴子吃桃,某天摘若干个,当天吃掉一半,又多吃一个重复到第8天时只剩下一个桃子了
//Xn=(Xn-1)/2-1;Xn=2*((Xn+1)+1),X8=1;
int tao(int n);//声明
int n;
for (n = 1; n <= 8; n++)
{
printf("第%d天有%d个桃子\n", n, tao(n));
}
}
(2).利用迭代法,循环解决
void peach2() {
//猴子吃桃,某天摘若干个,当天吃掉一半,又多吃一个重复到第8天时只剩下一个桃子了
//Xn=(Xn-1)/2-1;Xn=2*((Xn+1)+1),X8=1;
int tao, n;
tao = 1;
for (n = 7; n >= 1; n--)
{
tao = (tao + 1) * 2;
}
printf("tao(1)=%d\n", tao);
}
2.斐波那契数列,第一第二项为1,从第三项起,是前两项的值之和.
(1).利用递归,可推出f(n)=f(n-1)+f(n-2)
int fib(int n) {
//递推公式,f(n)=f(n-1)+f(n-2);
if (n = 2 || n == 1)
return 1;
return fib(n - 1) + fib(n - 2);
}
打印结果:
void printfib(int n) {
//斐波那契数列,第一第二项为1,从第三项起,是前两项的值之和.
//递推公式,f(n)=f(n-1)+f(n-2);
int fib(int n);//声明
int i;
for (i = 1; i <= n; i++)
{
printf("%d%c", fib(i), i % 5 == 0 ? '\n' : '\t');
}
}
(2).利用迭代循环
void printfib2(int n) {
int i, f1 = 1, f2 = 1, f3;
printf("%d\t%d\t", f1, f2);
for (i = 3; i <= n; i++)
{
f3 = f1 + f2;
printf("%d\t", f3);
if (i % 5 == 0)
printf("\n");
f1 = f2;
f2 = f3;
}
}