十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
我给你举个简单的例子你就明白了,你可以假设n=3
创新互联-专业网站定制、快速模板网站建设、高性价比湘桥网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式湘桥网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖湘桥地区。费用合理售后完善,10余年实体公司更值得信赖。
然后代入这个函数,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
满意请采纳
#include "stdio.h"
void fun1(int n,int m){
if(m0)
fun1(n,m-1);
printf("%-2d+%2d = %-2d ",n,m,n+m);
}
void fun2(int n,int m){
if(n0)
fun2(n-1,m);
fun1(n,m-n);
printf("\n");
}
int main(int argv,char *argc[]){
int N;
printf("Input N(int 0=N=99)...\nN=");
if(scanf("%d",N)!=1 || N0 || N99){
printf("Input error, exit...\n");
return 0;
}
fun2(N,N);
return 0;
}
运行样例:
递归有一个堆栈的概念,那就意味着他是一个反理解的过程:就象数学递推一样,你知道第一项,第二项,又知道通项公式,那你就可以知道任何一项。
然后你看代码:fun(0)==0,fun(1)==1;是告诉你一二项。
fun(n)==fun(n-1)+fun(n-2);是告诉你通项公式。那么,你就可以知道任何一项。你这样理解就差不多了,具体机器是怎么操作的,那很复杂的,也不需要明白!!!!
从主函数fun(6,x)开始调用。调用的时候,实参6和x将自身的值传递给形参n,s,接着,开始执行fun函数体内的语句第一次调用:判断if(n==0||n==1),此时的n值为6,不满足条件,执行else部分语句。 fun(n-1,f1);fun(n-2,f2);先调用fun(n-1,f1);而fun(n-2,f2);需要当fun(n-1,f1);符合if条件以后才轮到它执行第二次调用:此时,形参n=6转变为实参n,fun(n-1,f1)等价于fun(5,f1),继续判断,if(n==0||n==1),又不满足条件,于是,重复之前的操作,转向else部分执行。 fun(n-1,f1);fun(n-2,f2);此时的n=5,同样是先调用fun(n-1,f1);后面那个fun(n-2,f2);同样处于等待状态,等待前面的 fun(n-1,f1);符合IF条件后才轮到它执行,于是,fun(n-1,f1);就这样一层一层执行下去,每执行一次,n的值减一,当n=1的时候,执行if部分,这时,便可以在fun(n-1,f1);执行完毕只有继续执行fun(n-2,f2);,接着,返回前一次调用的状态,开始执行fun(n-2,f2);比如当n=2的时候,执行完fun(2-1=1,f1)以后,便开始执行fun(2-2=0,f2);和它后面的语句,最终,函数返回上一次调用的状态,即fun(3,f1);此时,fun(3,f1)已经执行完毕,因为之前我们已经把fun(2,f1)执行完了,接着,应该执行的是fun(3-2=1,f2);当这个函数最后终也符合if部分要求,又返回到前面的fun(4,f1),执行完后,开始执行fun(4,f2),这样一个流程。通常来说,递归可以简化代码,但同时也会增加系统开销并且让程序阅读的时候要比正常的顺序程序难以理解一些。不过,现代的硬件飞速发展,用递归是完全可以的。
这个很好理解啊,你看看你输入的参数什么就可以了。
你函数的声明是void fuck ( int n ,char o, char t, char th)
第一次调用你是fuck ( n, 'A','B','C');这时,o=A,t=B,th=C,所以输入
printf ("%c %c %c\n",t,o,th);就是BAC,
然后你fuck(n-1,t,o,th);,这时o=原来的t=B,t=原来的o=A,th=C,输出
printf ("%c %c %c\n",t,o,th);就是ABC了如此类推
第一级递归: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