#include?stdio.h
#include?stdlib.h
int?count=0;
int?fun(int?x,int?n)
{
count◆◆;
return?x*x;
}
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语言书里)
用递归法计算n!可用下述公式表示:
n!=1 (n=0,1)
nX(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);
具体如下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);
move(n-1,y,x,z);
int h;
printf("\ninput number:\n");
scanf("%d",h);
move(h,'a','b','c');
我解释下具体执行过程:
printf("%d!=%ld\n",num,mul(num));
这里又调用了一次方法,
这里看懂了没,递归函数关键字在"递"和"归",相当于循环,一直到条件不满足时在"归",一步步return直到第一个调用的mul方法.在return主函数.
也就是从最后一次调用
n的值为1了,执行else语句,结束"递"方法操作,return语句,返回X=1,那么此时此刻呢变为
希望你能看懂,还有问题在补充吧!
递归,是函数实现的一个很重要的环节,很多程序中都或多或少的使用了递归函数.递归的意思就是函数自己调用自己本身,或者在自己函数调用的下级函数中调用自己.
递归之所以能实现,是因为函数的每个执行过程都在栈中有自己的形参和局部变量的拷贝,这些拷贝和函数的其他执行过程毫不相干.这种机制是当代大多数程序设计语言实现子程序结构的基础,是使得递归成为可能.假定某个调用函数调用了一个被调用函数,再假定被调用函数又反过来调用了调用函数.这第二个调用就被称为调用函数的递归,因为它发生在调用函数的当前执行过程运行完毕之前.而且,因为这个原先的调用函数、现在的被调用函数在栈中较低的位置有它独立的一组参数和自变量,原先的参数和变量将不受影响,所以递归能正常工作.程序遍历执行这些函数的过程就被称为递归下降.
程序员需保证递归函数不会随意改变静态变量和全局变量的值,以避免在递归下降过程中的上层函数出错.程序员还必须确保有一个终止条件来结束递归下降过程,并且返回到顶层.
相当于循环,要有判断条件,传递进去的参数要变化,满足条件调用自身,不满足条件就开始一层一层返回.简单例子:
int
f(int
i){
sum=0;
if(i0)
sum◆=f(i-1);
return
sum;
main(){
a=10;
printf("%d",f(a));
以上就是土嘎嘎小编为大家整理的c语言用函数递归运算相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!