首页技术c语言递归函数的例子?递归函数的应用场景

c语言递归函数的例子?递归函数的应用场景

编程之家2026-05-26946次浏览

大家好,今天给各位分享c语言递归函数的例子的一些知识,其中也会对递归函数的应用场景进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!

c语言递归函数的例子?递归函数的应用场景

c语言递归函数

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

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

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

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

n!=1(n=0,1)

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

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语言递归函数的例子?递归函数的应用场景

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语言函数递归调用问题

它主要有两个函数HANOI和MOVE,HANOI表示的是移动前N-1个盘子,MOVE表示移动第N个盘子,参数'A','B','C'表示的是柱子的名称,在程序中ONE,TWO,THREE这三个参数让人看了一头雾水,如果把变量名称改为SOURCE,TEMP,DESTINATION我想更好理解,这三个变量表示的是起始的柱子,过渡的柱子,和目标柱子,可能会问已经把三个柱子命名为A,B,C,为什么还要引入三个变量即:ONE,TWO,THREE(SOURCE,TEMP,DESTINATION).以移动3个盘子为例说明一下这个程序的思路:第一步把前两个从 ONE(SOURCE)借助TWO(TEMP)移动到THREE(DESTINATION)用HANOI函数中的第一个HANOI函数实现,第二步把 ONE余下的最大的盘子移动到THREE,用MOVE函数实现,第三步把TWO柱上的两个盘子借助THREE移回到ONE,用HANOI函数中的第二个 HANOI函数实现,(因为THREE柱上的盘子已经是最大的了,任何盘子都可以放到它的上面,所以可以想象为它不存在)可以想象第三步的时候TWO变成了起始柱,而ONE变成了目标柱,而THREE变成过度柱了,HANOI函数参数的变化正体现了这一点.当运行到这里时,第3个盘子已经从ONE移动到了 THREE(这只是分析,真实情况是只有当递归完成时才做到这一步).这个时候原先移动3个盘子的问题变成移动两个盘子的问题,所以再调用HANOI时盘子的数量为N-1.直到N==1时,调用结束.

递归还是不用好

C语言递归函数问题

因为递归要存在一个最低层,这样才会有限,否则没有最低层的话,将会一直运行下去没有止境.

所以加个if

(n<=1)表示他的最低层n的值是1,而根据你代码palin(i),n的最初值是i,也就是5,所以

第一层n的值是5,如果n的值大于1,那么就运行else里面的语句进入下一层palin(n-1)

第二层的时候n的值是上一层中的n-1也就是5-1=4

一直这样下去到n=1的时候运行if里的语句,里面不会再出现palin函数,就到达最底层.

然后运行完,逐层弹出去.

就是这样自己函数再读入自己函数,形成递归.

如果解释不明白

直接call我或者补充问题吧`

OK,关于c语言递归函数的例子和递归函数的应用场景的内容到此结束了,希望对大家有所帮助。

ai少女工作室一直卡在启动界面?AI少女工作室进不去怎么办工作室进不去的解决办法应用下载站源码php(php应用商店源码)