首页技术c语言递归算法经典实例?c语言递归举例

c语言递归算法经典实例?c语言递归举例

编程之家2026-06-20992次浏览

这篇文章给大家聊聊关于c语言递归算法经典实例,以及c语言递归举例对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

c语言递归算法经典实例?c语言递归举例

C语言递归算法

递归具体用法其实就是让你把一个问题分解成很多个类似的情况,虽然你要解决这个问题非常难,莫名其妙,要你想几年,但是把他一直递归分解,就变成很好理解的单种情况,而你整个问题又是跟这个单种情况类似,把整个问题通过递归调用一层一层分解到最低级简单的那种情况,就是你所需要理解的了。

一个函数在它的函数体内调用它自身称为递归调用。这种函数称为递归函数。C语言允许函数的递归调用。在递归调用中,主调函数又是被调函数。执行递归函数将反复调用其自身,每调用一次就进入新的一层。

(引自谭浩强的C语言书里)

用递归法计算n!可用下述公式表示:

n!=1(n=0,1)

n×(n-1)!(n>1)

c语言递归算法经典实例?c语言递归举例

具体如下long ff(int n)

{

long f;

if(n<0) printf("n<0,input error");

else if(n==0||n==1) f=1;

else f=ff(n-1)*n;

c语言递归算法经典实例?c语言递归举例

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语言用递归算法求解下面这个题!!!求大神

以下是使用递归算法实现上述程序的C语言代码:

#include<stdio.h>

float sum(int n){

if(n== 0){//基本情况

return 0;

} else{

float s= 0;

for(int i= 1; i<= n; i++){//计算1/1+2+3+...+n

s+= i;

}

return sum(n-1)+ 1/s;//递归调用

}

}

int main(){

int n;

printf("请输入n的值:");

scanf("%d",&n);

printf("sum=%.2f\n", sum(n));

return 0;

}

在这个递归函数中,我们使用了一个基本情况,即当n等于0时,返回0作为递归的终止条件。在其他情况下,我们使用for循环计算1/1+2+3+...+n的值,然后通过递归调用求解sum(n-1),最后将两个结果相加。

编写用C语言实现的求n阶阶乘问题的递归算法

代码如下:

long int fact(int n)

{

int x;

long int y;

if(n<0)

{

printf(“error!”);

}

if(n==0)

return 1;

x=n-1;

y=fact(x);

return(n*y);

}

拓展阅读:

特点

递归算法是一种直接或者间接地调用自身算法的过程。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。

递归算法解决问题的特点:

(1)递归就是在过程或函数里调用自身。

(2)在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。

(3)递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。

(4)在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序。

要求

递归算法所体现的“重复”一般有三个要求:

一是每次调用在规模上都有所缩小(通常是减半);

二是相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入);

三是在问题的规模极小时必须用直接给出解答而不再进行递归调用,因而每次递归调用都是有条件的(以规模未达到直接解答的大小为条件),无条件递归调用将会成为死循环而不能正常结束。

好了,文章到此结束,希望可以帮助到大家。

阴阳师 夜叉(八歧大蛇阴阳师)gamma函数的导数?sgnx是什么函数