相信看到标题还很迷不知道具体要表达的意思,让我们往下面看看吧。
也估计会有很多人心里想着,这还不简单,直接改变函数类型
毕竟函数类型决定了返回类型,是吧 。
那可以想出下面代码为什么两个整形变量操作没有丢失掉小数的精度吗?
#include <stdio.h>
float ac(int a, int b)
{
if (1 == b)
return 2;
else
return (a / ac(a, b-1));
}
int main()
{
int a = 17;
int b = 4;
printf("%f", ac(a, b));
}
能马上想的出来的朋友 ,说明基础很扎实。
如果没有想出来没关系,我们先思考一下如果现在不是递归函数,只是普通自定义函数,如果两个整形变量进行互相操作,哪怕函数类型是float/double 最后返回的结果就是整数.0,那么我们小数部分就丢失掉了。
如图:
为什么递归函数就会这样???
作者想了好久,都要准备去群里问别人了,正好饭点去吃了个饭,一回来顿悟。我们知道递归函数是一层一层的,所以直到b=1时候才有了第一个返回值也就是我们的2。因为是float型函数应该是2.0,在一层一层的回来,所以小数才没有丢失,最后也就是我们所看到的。
接第一张图
#include <stdio.h>
float ac(int a, int b)
{
return (a / b);
}
int main()
{
int a = 17;
int b = 4;
printf("%f", ac(a, b));
}