十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
首递归,s数组的地址被传入,首先判断地址指向的空间是否为空,在abcd的情况下,不为空,所以会反复递归调用自己4次,每次地址都+1,也就是指向下一个字母。(注意printf()一直没有执行,它只是把*a压入堆栈中,暂存起来)
成都创新互联公司-专业网站定制、快速模板网站建设、高性价比金乡网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式金乡网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖金乡地区。费用合理售后完善,10余年实体公司更值得信赖。
当超过d时,内容为空,if不成立,此时,函数开始返回。返回时遇到的第一条语句是printf,第一次返回输出d,再次返回,输出c,依此类推,到a结束,整个函数都返回完成,回到main()中。
递归有一个堆栈的概念,那就意味着他是一个反理解的过程:就象数学递推一样,你知道第一项,第二项,又知道通项公式,那你就可以知道任何一项。
然后你看代码:fun(0)==0,fun(1)==1;是告诉你一二项。
fun(n)==fun(n-1)+fun(n-2);是告诉你通项公式。那么,你就可以知道任何一项。你这样理解就差不多了,具体机器是怎么操作的,那很复杂的,也不需要明白!!!!
#include stdio.h
#include math.h
void fun2(int m)
{
int k=0,a[10];
for(int i=2;im;i++)
if(m%i==0)
a[k++]=i;
for(int i=0;ik;i++)
{
printf("%d",a[i]);
if(i!=k-1)
printf(",");
}
}
void fun1(int m)
{
if(m2)
printf("%d is a prime number",m);
for(int i=2;i*i=m;i++)
if(m%i==0)
fun2(m);
else
printf("%d is a prime number",m);
}
int main( )
{ int n;
scanf("%d",n);
fun1(n);
return 0;
}
代码文本:
#include "stdio.h"
double fun(int f,int n){
if(f100000000)
return 1.0/f+fun(f*(n+1),n+1);
return 1.0;
}
int main(int argc,char *argv[]){
printf("e≈%f\n",fun(1,1));
return 0;
}
因为代码fun函数调用顺序是fun(30501)、fun(3050)、fun(305)、fun(30)、fun(3);fun(3)调用终止,执行输出语句先是fun(3),即输出3,然后是执行fun(30)的输出语句..……刚好与调用顺序相反,如果想输出时1 5 3,把两个if语句顺序调换即可:
#include"stdio.h"
void fun(int n)
{
if (n % 10) printf("%c\t", n % 10 + '0');
if (n / 10)
fun(n / 10);
}
main()
{
int n;
scanf("%d", n);
fun(n);
}