嗨,小伙伴们!我是你们的Erochan,今天我们要来聊一聊如何使用递归函数来计算个人所得税~ 是的!虽然“个人所得税”这个词听起来有点严肃,但今天我们用轻松的方式来揭开它的神秘面纱!
/* 05-tvarp.cpp -- return tax of money*/
// 作用:计算个人所得税
// 实现:
// 1. 定义税率表和税级阈值。
// 2. 使用递归函数gettax()计算税额,根据收入级别和税率表计算不同部分的税额。
// 3. 在主函数中循环输入收入并调用gettax()函数计算税额。
#include <iostream>
using namespace std;
const int v1m = 5000; // lv1 money
const int v2m = 10000; // lv2 money
const int v3m = 20000; // lv3 moeny
const double v1r = 0.0; // lv1 rate
const double v2r = 0.1; // lv2 rate
const double v3r = 0.15; // lv3 rate
const double v4r = 0.2; // lv4 rate
const double v2t = v2m * v2r; // lv2 max tax
const double v3t = v3m * v3r; // lv3 max tax
double gettax(int money, int mark);
int main(int argc, char const *argv[])
{
int money = 0;
double tax = 0;
cout << "Enter moneies (< 0 or not number to quit)\nmoney: ";
while (cin >> money && money >= 0)
{
cout << gettax(money, 0) << endl;
cout << "input: ";
}
return 0;
}
double gettax(int money, int mark)
{
double tax = 0;
if (money < 0)
return tax;
switch (mark)
{
case 0:
return gettax(money - v1m, 1);
case 1:
return money > v2m ? gettax(money - v2m, 2) + v2t : money * v2r;
case 2:
return money > v3m ? gettax(money - v3m, 3) + v3t : money * v3r;
case 3:
return tax + money * v4r;
}
return tax;
}
首先,我们来看看我们手上的这段代码吧。其实这段代码就是在用递归来帮我们计算个人所得税。递归?不要担心,听我慢慢解释!
1. 认识税率表和税级阈值
代码中有几个常量变量,一起来认识一下它们吧:
v1m = 5000
:表示第一级的收入金额。v2m = 10000
:表示第二级的收入金额。v3m = 20000
:表示第三级的收入金额。
再来看看税率:
v1r = 0.0
:第一级的税率是0,也就是说收入在5000以内不交税哦!v2r = 0.1
:第二级的税率是10%。v3r = 0.15
:第三级的税率是15%。v4r = 0.2
:第四级的税率是20%。
注意到v2t
和v3t
吗?这两个变量其实是帮我们预计算了第二级和第三级最多可能缴纳的税额,这样在递归计算时可以简化一些逻辑。
2. 递归计算税额
递归的核心在于函数自己调用自己,分而治之。我们来看gettax()
函数的具体实现:
double gettax(int money, int mark) {
double tax = 0;
if (money < 0)
return tax;
switch (mark) {
case 0:
return gettax(money - v1m, 1);
case 1:
return money > v2m ? gettax(money - v2m, 2) + v2t : money * v2r;
case 2:
return money > v3m ? gettax(money - v3m, 3) + v3t : money * v3r;
case 3:
return tax + money * v4r;
}
return tax;
}
在这个函数里,money
就是你赚的钱,而mark
则代表着当前的税级。
-
第0级(mark = 0):程序会先将
money
减去5000元,跳到下一个税级去计算。因为5000元以内是免税的,所以我们直接进入下一级。 -
第1级(mark = 1):这里我们要检查一下
money
是否超过10000元。如果超过了,我们就再次递归,跳到下一级;如果没有超过,就直接乘以10%的税率计算应缴税额。 -
第2级(mark = 2):这个逻辑和第1级类似,只不过我们在计算时用的是15%的税率。
-
第3级(mark = 3):这是最后一级,所有剩余的
money
都乘以20%的税率来计算。
这样通过递归,程序会逐级计算每个收入区间的税额,最后累加起来得到总税额。厉害吧!
3. 代码的整体流程
在main()
函数里,我们会提示用户输入收入金额,然后调用gettax()
函数来计算税额。如果输入的金额为负数或者输入非法,程序就会退出。这种设计是不是很人性化呢?
举个栗子!
假设你赚了15000元。
- 程序首先调用
gettax(15000, 0)
。 - 因为15000大于5000,所以进入
mark
为1的情况,计算出5000元的税额,然后递归调用gettax(10000, 2)
。 - 10000大于5000,小于10000,所以进入
mark
为2的情况,计算出10000元的税额。 - 最终把所有税额加起来,就是你应该缴纳的个人所得税
4. 小结
这段代码虽然看起来有些复杂,但其实它用到了递归的思路来逐级计算税额,非常优雅。只要你理解了每一级的税率和收入区间,再加上递归函数的特性,就能轻松掌握个人所得税的计算逻辑啦!
Erochan觉得这段代码很适合用来理解递归的基本概念,也让我们更好地理解个人所得税的计算方式。如果你有其他问题,记得随时来找我哟!么么哒~