c语言里的递归函数 c语言递归函数的概念及用法

讲一下c语言中递归函数的使用方法

递归函数有三点要求:

目前创新互联已为近千家的企业提供了网站建设、域名、虚拟主机网站运营、企业网站设计、安阳网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

1,递归的终止点,即递归函数的出口

2,不断的递归调用自身

3,递归函数主体内容,即递归函数需要做的事情

ps:3一般可以放在2的前面或者后面,一般1放最前面。另外,2和3可以根据不同的需要合并,比如,有时候递归函数的主体就是返回调用下层函数所得到的结果。

具体例子如下:

void fun(int n)

{

if(n=0) return;   //1 这是递归的终点,即出口

fun(n-1);        //2、递归函数自身的调用

coutnendl;     //3 递归函数的主体内容

}

2,3合并的情况

int fun(int n)

{

if(n=0) return 0;

return fun(n-1)+fun(n-2);  //2 3合并

}

c语言中的递归函数

1、用在出口条件上

if(n==1) return x;

if(n1) x=(x+1)*fun(x,n-1);正确可以实现递归功能

2、用在出口条件和继续递归的调用上(实际上还是在出口条件)

if(n==1) return x;

if(x1) return (x+1)*fun(x,n-1);正确这个也可以实现递归功能

3、在设置一个值,用这个值来判断,最终还是能实现递归

int m;

if(n==1) m=x;

if (n1) m=(x+1)*fun(x,n-1);

return m;

万变不离其踪,return 永远用在函数的出口条件上,没有return就死循环了不是么?

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语言中,什么是函数的递归?

所谓递归,说的简单点,就是函数自己调用自己,然后在某个特定条件下。结束这种自我调用。

如果不给予这个结束条件,就成了无限死循环了。这样这个递归也就毫无意义了。

如下面问题

1 1 2 3 5 8 13 21 ........n

分析可以看出, i 表示第几个数, n 表示该数的值

当i = 1 时, n = 1;

当i = 2 时, n = 1;

当i = 3 时 n = i1 + i2;

当i = 4 时 n = i2 + i3

所以可以写个函数

int fun(int n) // 这里的n代表第几个数

{

if(1 == n || 2 == n) // 第一个数

{

return 1;

}

else

{

return fun(n - 1) + fun(n - 2); // 这里就是自己调用自己,形成循环自我调用。

}

}

注: 以上代码只是用来演示递归,不包含错误校验。

在实际生产过程中。该代码不够健壮。

如此,就完成了递归。你就可以求得第n个数了。

何时考虑使用递归。

当你分析一个问题的时候,发现这个问题,是一个自我循环时,而且这个自我循环到一个给定值,就可以终止的时候,你就快要考虑递归了。

分享文章:c语言里的递归函数 c语言递归函数的概念及用法
链接URL:https://www.cdcxhl.com/article4/dochcie.html

成都网站建设公司_创新互联,为您提供网站设计网站收录云服务器自适应网站品牌网站设计小程序开发

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

外贸网站建设