十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
int hehe(int n) {
成都创新互联公司专注于肃州企业网站建设,成都响应式网站建设公司,商城建设。肃州网站建设公司,为肃州等地区提供建站服务。全流程按需定制开发,专业设计,全程项目跟踪,成都创新互联公司专业和态度为您提供的服务
if(n=1) return 1;
return n * hehe(n-1);
}
我们一点一点来看:
首先 n = 0 传入,if条件满足 返回 hehe(0) = 1
在传入 n = 1, if条件还是满足 返回 hehe(1) = 1
我们传入参数 n = 2, if 条件不满足 hehe(2) = 2 * hehe( 2 - 1 )= 2 * 1
在我们传入 n =3 , if条件不满足 hehe(3) = 3 * hehe(2) == 3 * 2 * 1
你继续这个步骤 ,对任何正整数n
hehe(n) = n * hehe(n-1) = n * (n-1) * ......* 1
明白了吗?!
一个函数的函数名既是该函数的代表,也是一个变量。由于函数名变量通常用来把函数的处理结果数据返回给调用函数,即递归调用,所以一般把函数名变量称为返回值,函数的返回值类型是在定义函数时指定的。
函数可以有返回值,也可以没有返回值。
1、没有返回值的函数:功能只是完成一个操作,应将返回值类型定义为void,函数体内可没有return语句。
2、有返回值的函数:函数的最后会有一个返回值return,可以用来获取该函数执行结果返回给该函数,让外部调用该函数的。
一个函数的函数名既是该函数的代表,也是一个变量。由于函数名变量通常用来把函数的处理结果数据返回给调用函数,即递归调用,所以一般把函数名变量称为返回值,函数的返回值类型是在定义函数时指定的。
扩展资料
C程序中的print函数:
是这样写的:printf("%d\n",printf("%d",printf("%d",i)));
一共有三个printf函数,我们可以使用一些代号来简化这个printf函数,如下:
代号A: printf("%d",printf("%d",i));
代号B: printf("%d",i)
则C程序代码可以简化为:printf("%d\n",A); 那么我们就先来求A。而A,又可以简化为:printf("%d",B);那么就先来求B。
B是 printf("%d",i),打印出“123”,即在C语言运行结果中,你最先看到的是123。C语言printf函数的返回值是printf实际控制输出的字符数,那么打印的123 就是3个字符,因此printf("%d",i)返回的就是3,也就是B是3。
那么,A就可以写为printf("%d",printf("%d",3));打印出3,即在运行结果中,你紧接着会看到3。
而打印出的3是1个字符,因此A就是1,那么printf("%d\n",A); 实际上就是printf("%d\n",1); 打印出1。
参考资料来源:百度百科-返回值
return
表示从被调函数返回到主调函数继续执行,返回时可附带一个返回值,由return后面的参数指定。
return通常是必要的,因为函数调用的时候计算结果通常是通过返回值带出的。
如果函数执行不需要返回计算结果,也经常需要返回一个状态码来表示函数执行的顺利与否(-1和0就是最常用的状态码),主调函数可以通过返回值判断被调函数的执行情况。
return语句后面具体是什么内容,这就要具体情况具体分析了:
(1)
在返回类型是char的函数中,return后应该是char类型的值;
(2)
在返回类型是int的函数中,如果是要停止函数的调用,最好应该为0;其他的按照你的目的而定,只要是int
类型就行了
(3)
在返回类型是结构类型的函数中,return后应该是结构的一个实例对象。
总之,函数定义为什么样的返回类型,该函数中return后就应该是相应类型的值。
...
从汇编的角度来说,函数返回值,其实就是函数返回后,cpu中eax的值。在C语言等语方中,在函数中写了返回语句,那么函数在返回时,就会对eax作最后赋值。
int find(int a,int b)
{
if(b=0) return 100;
else
find(--a,--b);/这里为什么不用返回值?/
}
//为什么不用返回值呢,因为此程序进行递归后,在最初返回时,eax的值被赋值为100,而之后的回溯过程中,程序并没有修改eax的值,所以到最后,返回值还是100。
这种写法是会出问题的。应写成。
int find(int a,int b)
{
if(b=0) return 100;
else
return find(--a,--b);
}
为什么了修改之后就出错呢,如以上所说,这很好理解,因为程序最后调用了printf()。eax中的值是printf()的返回值。若把他当成find()的返回值自然是出错了。