猴子吃桃问题——函数递归

2011年11月17日 发表评论 阅读评论

猴子吃桃问题:小猴摘了很多桃子,第一天吃了一半又多吃一个,第二天又吃掉一半再多吃一个,如此下去,到第真十天恰好还剩一个桃子。问第一天小猴摘了多少桃子?

分析:每一天的桃子数都是后一天的桃子数的2倍加上一个。因此用数学关系表示如下:

peach(n)=1???? (day=10)

peach(n)=(peach(n+1)+1)*2?? (1<=day<10)
因此,程序代码可写为:

#include<stdio.h>
int peach(int day){
??? int n;
??? if(day==10)n=1;
??? else n=2*(peach(day+1)+1);
??? return n;
}
main()
{
printf("%dn",peach(1));?? /*递归调用函数本身*/
}

注意:本代码如果把main函数放在上面,把peach函数放在下面。main函数中要加一条对peach函数的定义,直接就int peach(int day)就行。

再给出一个经典的例子,代码如下:

#include<stdio.h>
long fac(unsigned n)
{
??? long f ;
??? if(n==0)
??????? f=1;
??? else f=n*fac(n-1);
??? return f;
}
main()
{
??? long y;
??? int n;
??? scanf("%d",&n);
??? printf("%d!=%ldn",n,fac(n));
}

输入一个无符号整数,算该数的阶乘。

注:一定注意,scanf句中的&n句中,&一定不能少。少了以后编绎时并不会出错,但是运行时会出现Segmentation fault的错误。刚开始出现该错误时让我很迷茫。不知道错在了哪,网上说的都是关于指针时才会有此错。后来仔细查看了下代码,才发现少了&符号。




本站的发展离不开您的资助,金额随意,欢迎来赏!

You can donate through PayPal.
My paypal id: itybku@139.com
Paypal page: https://www.paypal.me/361way

分类: C/C++/Java/Delphi 标签:
  1. 2011年12月3日18:57 | #1

    To think, I was confused a muinte ago.