猴子吃桃问题:小猴摘了很多桃子,第一天吃了一半又多吃一个,第二天又吃掉一半再多吃一个,如此下去,到第真十天恰好还剩一个桃子。问第一天小猴摘了多少桃子?
分析:每一天的桃子数都是后一天的桃子数的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(day10)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(n0)
??????? 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的错误。刚开始出现该错误时让我很迷茫。不知道错在了哪,网上说的都是关于指针时才会有此错。后来仔细查看了下代码,才发现少了&符号。