c语言递归函数计算函数值 c++的递归函数
c语言递归算法
用递归法计算n!
创新互联建站是专业的蚌山网站建设公司,蚌山接单;提供网站设计制作、做网站,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行蚌山网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
用递归法计算n!可用下述公式表示:
n!=1 (n=0,1)
n×(n-1)! (n1)
按公式可编程如下:
long ff(int n)
{
long f;
if(n0) printf("n0,input error");
else if(n==0||n==1) f=1;
else f=ff(n-1)*n;
return(f);
}
main()
{
int n;
long y;
printf("\ninput a inteager number:\n");
scanf("%d",n);
y=ff(n);
printf("%d!=%ld",n,y);
}
程序中给出的函数ff是一个递归函数。主函数调用ff 后即进入函数ff执行,如果n0,n==0或n=1时都将结束函数的执行,否则就递归调用ff函数自身。由于每次递归调用的实参为n-1,即把n-1的值赋予形参n,最后当n-1的值为1时再作递归调用,形参n的值也为1,将使递归终止。然后可逐层退回。
下面我们再举例说明该过程。设执行本程序时输入为5,即求5!。在主函数中的调用语句即为y=ff(5),进入ff函数后,由于n=5,不等于0或1,故应执行f=ff(n-1)*n,即f=ff(5-1)*5。该语句对ff作递归调用即ff(4)。
进行四次递归调用后,ff函数形参取得的值变为1,故不再继续递归调用而开始逐层返回主调函数。ff(1)的函数返回值为1,ff(2)的返回值为1*2=2,ff(3)的返回值为2*3=6,ff(4)的返回值为6*4=24,最后返回值ff(5)为24*5=120。
用C语言的函数递归方法来求
#include stdio.h
#include math.h
void fun2(int m)
{
int k=0,a[10];
for(int i=2;im;i++)
if(m%i==0)
a[k++]=i;
for(int i=0;ik;i++)
{
printf("%d",a[i]);
if(i!=k-1)
printf(",");
}
}
void fun1(int m)
{
if(m2)
printf("%d is a prime number",m);
for(int i=2;i*i=m;i++)
if(m%i==0)
fun2(m);
else
printf("%d is a prime number",m);
}
int main( )
{ int n;
scanf("%d",n);
fun1(n);
return 0;
}
c语言递归函数
递归具体用法其实就是让你把一个问题分解成很多个类似的情况,虽然你要解决这个问题非常难,莫名其妙,要你想几年,但是把他一直递归分解,就变成很好理解的单种情况,而你整个问题又是跟这个单种情况类似,把整个问题通过递归调用一层一层分解到最低级简单的那种情况,就是你所需要理解的了。
一个函数在它的函数体内调用它自身称为递归调用。这种函数称为递归函数。C语言允许函数的递归调用。在递归调用中,主调函数又是被调函数。执行递归函数将反复调用其自身,每调用一次就进入新的一层。
(引自谭浩强的C语言书里)
用递归法计算n!可用下述公式表示:
n!=1 (n=0,1)
n×(n-1)! (n1)
具体如下long ff(int n)
{
long f;
if(n0) printf("n0,input error");
else if(n==0||n==1) f=1;
else f=ff(n-1)*n;
return(f);
}
main()
{
int n;
long y;
printf("\ninput a inteager number:\n");
scanf("%d",n);
y=ff(n);
printf("%d!=%ld",n,y);
}
较难题:一块板上有三根针,A,B,C。A针上套有64个大小不等的圆盘,大的在下,小的在上。如图5.4所示。要把这64个圆盘从A针移动C针上,每次只能移动一个圆盘,移动可以借助B针进行。但在任何时候,任何针上的圆盘都必须保持大盘在下,小盘在上。求移动的步骤。
具体如下move(int n,int x,int y,int z)
{
if(n==1)
printf("%c--%c\n",x,z);
else
{
move(n-1,x,z,y);
printf("%c--%c\n",x,z);
move(n-1,y,x,z);
}
}
main()
{
int h;
printf("\ninput number:\n");
scanf("%d",h);
printf("the step to moving %2d diskes:\n",h);
move(h,'a','b','c');
}
从程序中可以看出,move函数是一个递归函数,它有四个形参n,x,y,z。n表示圆盘数,x,y,z分别表示三根针。move 函数的功能是把x上的n个圆盘移动到z上。当n==1时,直接把x上的圆盘移至z上,输出x→z。如n!=1则分为三步:递归调用move函数,把n-1个圆盘从x移到y;输出x→z;递归调用move函数,把n-1个圆盘从y移到z。在递归调用过程中n=n-1,故n的值逐次递减,最后n=1时,终止递归,逐层返回。当n=4 时程序运行的结果为:
C语言函数递归计算
#include stdio.h
#include stdlib.h
int count=0;
int fun(int x,int n)
{
count++;
if(n==2)
{
return x*x;
}
else if(n%2==0)
{
return fun(x,n/2)*fun(x,n/2);
}
else if(n%2==1)
{
return fun(x,n-1)*x;
}
}
int main(int argc, char *argv[]) {
int sum=0,x,n;
printf("请输入x n的值(两数之间用空格间隔):");
scanf("%d %d",x,n);
sum=fun(x,n);
printf("%d 递归调用了%d次",sum,count);
return 0;
}
当前题目:c语言递归函数计算函数值 c++的递归函数
网页路径:http://azwzsj.com/article/hihcjg.html