c语言猴子吃桃递推程序,C语言经典题目:递归,迭代法解决斐波那契数列,,猴子吃桃问题...

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;

}

}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值