为什么递归函数里面只有两个整形变量却可以返回浮点数?

相信看到标题还很迷不知道具体要表达的意思,让我们往下面看看吧。

也估计会有很多人心里想着,这还不简单,直接改变函数类型

毕竟函数类型决定了返回类型是吧  。

那可以想出下面代码为什么两个整形变量操作没有丢失掉小数的精度吗?

#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));
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值