作者在 2010-10-13 15:41:15 发布以下内容
C语言学习第二周,收获小结(一)递归调用
例:有5个人,第一个人10岁,后面每个人均比前一个人大2岁,问第5个人多大?分析:age(n)=1, n=1;
age(n)=age(n-1)+2, n>=2.
#include "stdio.h"
int age(int n)
{
int c;
if(n==1)
c=10;
else
c=age(n-1)+2;
return c;
}
void main()
{
printf("%d\n",age(5));
}
例:用递归法求阶乘n!(n>0)int age(int n)
{
int c;
if(n==1)
c=10;
else
c=age(n-1)+2;
return c;
}
void main()
{
printf("%d\n",age(5));
}
分析:n!=1, n=0,1;
n!=n*(n-1)!, n>1;
#include "stdio.h"
float Fac(int n)
{
float f;
if(n>1)
f=Fac(n-1)*n;
else if(n==1||n==0)
f=1;
else
f=0;
return f;
}
void main()
{
int n;
float f;
printf("Input a number:\n");
scanf("%d",&n);
f=Fac(n);
if(!f)
printf("Error!\n");
else
printf("%d!=%.0f",n,f);
}
小结:使用递归要注意两点:1)递归的结束条件;2)完整并且正确的递推公式。float Fac(int n)
{
float f;
if(n>1)
f=Fac(n-1)*n;
else if(n==1||n==0)
f=1;
else
f=0;
return f;
}
void main()
{
int n;
float f;
printf("Input a number:\n");
scanf("%d",&n);
f=Fac(n);
if(!f)
printf("Error!\n");
else
printf("%d!=%.0f",n,f);
}