函数的递归调用
Posted 天下无丝
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数的递归调用相关的知识,希望对你有一定的参考价值。
/* 函数的递归调用:在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用
p185 例7.6 有5个学生坐在一起,问第5个学生多少岁,他说比第4个学生大2岁。问第4个学生岁数,他说
比第3个学生大2岁。问第3个学生,又说比第2个学生大2岁。问第2个学生,说比第1个学生大2岁。最后问
第1个学生,他说是10岁。请问第5个学生多大。
解题思路:要求第5个学生的年龄,须先求出第4个学生的年龄,第4个取决于第3个学生,第3个取决
于第2个,第2个取决于第1个。每一个学生的年龄都比起前一个学生大2。即:
age(5)=age(4)+2
age(4)=age(3)+2
age(3)=age(2)+2
age(2)=age(1)+2
age(1)=10
可用数学公式表述如下:
age(n)=10 (n=1)
age(n)=age(n-1)+2 (n>1)
*/
#include<stdio.h>
int main()
{
int age(int n);
printf("NO.5,age=%d\\n",age(5)); //输出第5个学生的年龄
return 0;
}
int age(int n) //定义递归函数
{
int c;
if(n==1) //如果n等于1
{
c=10; //年龄为10
}
else //如果n不等于1
c=age(n-1)+2; //年龄是前一个学生的年龄加2
return(c); //返回年龄
}
运行结果:
程序分析:main函数中实际上只有一个语句。整个问题的求解全靠一个age(5)函数调用来解决。调用过程如下图所示
从上图可以看到:age函数共被调用5次,即age(5)、age(4)、age(3)、age(2)、age(1)。其中age(5)是main函数调用的,
其余4次是在age函数中调用的,即 递归调用4次。
/* p187 例7.7 用递归方法求n!
解题思路:求n!可以用递归方法,即从1开始,乘2,再乘3……一直乘到n。
n!=n*(n-1)!
求n!也可以用递归方法,即5!=4!*5,4!=3!*4,…,1!=1。可用下面的递归公式表示:
n!=1 (n=0,1)
n*(n-1)! (n>1)
*/
#include<stdio.h>
int main()
{
int fac(int n); //fac函数声明
int n;
int y;
printf("input an integer number:");
scanf("%d",&n); //输入要求的阶乘数
y=fac(n);
printf("%d!=%d\\n",n,y);
return 0;
}
int fac(int n) //定义fac函数
{
int f;
if(n<0) //n不能小于0
printf("n<0,data error!");
else if(n==0||n==1) //n=0 或,1时 n!=1
f=1;
else f=fac(n-1)*n; //n>1时,n!=n*(n-1)
return(f);
}
运行结果:
程序分析:递归终止条件为n=0或n=1。
以上是关于函数的递归调用的主要内容,如果未能解决你的问题,请参考以下文章