十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
第一级递归:n=483,i=n/10=48≠0
网站建设哪家好,找创新互联建站!专注于网页设计、网站建设、微信开发、成都小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了敦化免费建站欢迎大家使用!
注意此时先递归调用convert(48),待递归返回再输出当前n的个位数字n%10=3
第二级递归:n=48,i=n/10=4≠0
此时继续递归调用convert(4),待递归返回再输出当前n的个位数字n%10=8
第三级递归:n=4,i=n/10=0
此时递归终止,先输出当前n的个位数字n%10=4
再返回上一级递归输出8,最后返回第一级递归输出3
因此最终输出为:4 8 3
递归有一个堆栈的概念,那就意味着他是一个反理解的过程:就象数学递推一样,你知道第一项,第二项,又知道通项公式,那你就可以知道任何一项。
然后你看代码:fun(0)==0,fun(1)==1;是告诉你一二项。
fun(n)==fun(n-1)+fun(n-2);是告诉你通项公式。那么,你就可以知道任何一项。你这样理解就差不多了,具体机器是怎么操作的,那很复杂的,也不需要明白!!!!
1、打开VC6.0软件,新建一个C语言的项目:
2、接下来编写主程序,首先定义用来求阶乘的递归函数以及主函数。在main函数里定义变量sum求和,调用递归函数fact(),并将返回值赋予sum,最后使用printf打印sum的结果,主程序就编写完了:
3、最后运行程序,观察输出的结果。以上就是C语言使用递归求阶乘的写法:
我给你举个简单的例子你就明白了,你可以假设n=3
然后代入这个函数,a(3)=a(2)+5;而a(2)=a(1)+5;a(1)=1
所以最后就是a(3)=1+5+5=11…
同理你可以算出a(10)=1+5*9=46
满意请采纳
相当于循环,要有判断条件,传递进去的参数要变化,满足条件调用自身,不满足条件就开始一层一层返回。简单例子:
int
f(int
i){
int
sum=0;
if(i0)
sum+=f(i-1);
return
sum;
}
main(){
int
a=10;
printf("%d",f(a));
}
递归具体用法其实就是让你把一个问题分解成很多个类似的情况,虽然你要解决这个问题非常难,莫名其妙,要你想几年,但是把他一直递归分解,就变成很好理解的单种情况,而你整个问题又是跟这个单种情况类似,把整个问题通过递归调用一层一层分解到最低级简单的那种情况,就是你所需要理解的了。
一个函数在它的函数体内调用它自身称为递归调用。这种函数称为递归函数。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 时程序运行的结果为: