重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
int
创新互联公司是一家专注于网站设计制作、做网站与策划设计,雨山网站建设哪家好?创新互联公司做网站,专注于网站建设十载,网设计领域的专业建站公司;建站业务涵盖:雨山等地区。雨山做网站价格咨询:13518219792
fun(int
n)
定义函数fun
{if
(n1)
return
n*fun(n-1);
如果n1,函数
返回值
为n*fun(n-1)
else
return
1;
}
否则为1;
main()
主函数
{int
i,s=0;
整型i,s,其中s=0
for(i=1;i=4;i++)
i小于等于4时,运行s+=fun(i),然后i自加
s+=fun(i);
s等于s加上函数fun的返回值
printf(''%d\n",s);
}
打印s
最后结果为s=1+2*1+3*2*1+4*3*2*1
讨论下:递归是利用栈来实现的。被调函数地址首先存入栈,存在栈底部红色部分,然后f(5)入栈,f(4)、f(3)、f(2)、f(1)依次入栈,由于当n=1时候,f(1)可以被求解,f(1)出栈,栈顶指针top--,依次解析f(2)、f(3)、f(4)、f(5),最后返回被调函数地址。
回调函数,顾名思义,也就是等该函数执行完了,会回去调用我们传进去的函数。
用到回调函数的地方有不少,像我见过的:SQLite中的一个函数,sqlite_exec函数名有没有记错我没什么印象了。待这个函数执行完毕后,会去调用我传进去的一个函数,一般回调函数都是有自己的参数列表格式的,再利用这个格式从回调函数中获取到我们需要的一些值。
第一级递归: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