我被返回函数弄糊涂了
#include <iostream>
using namespace std;
int result(int n)
{
if (n <= 10) {
return n;
}
else {
int a = n % 10;
cout << a << endl;
int b = n / 10;
cout << b << endl;
//*this part is complicated*
return a + result(a + b);
}
}
int main()
{
cout << result(5126);
return 0;
}
像写作测试一样进行。
- 调用result()函数,其值为5126
- Result()函数将询问计算机:是否5126小于或等于到10
- 正如你所看到的,它不是,所以它将继续到";其他部分">
- 然后,它将把5126modulo的模运算结果相加10,也就是6的,所以现在a";等于6
- 它将打印"0"的值a";,
a = 6
- 然后,它将添加5126在10之间的除法结果是512.6(由于它是浮点并且变量是整数,编译器将其视为512),所以现在">b";等于512,它将打印它
- 这里是当递归打开时,我们将调用虚变量total,其现在具有值"0">a";即6加上运行result()函数,其值为a加b,即512+6
- 我们在结果函数中再次输入,但现在n为518,Result()函数将询问计算机:Is518小于或等于10
- 正如你所看到的,它不是,所以它将继续到">其他部分">
- 然后,它将把518模的模运算结果相加10,也就是8的,所以现在a">等于8
- 它将打印"0"的值a";,
a = 8
- 然后,它将添加518在10之间的除法结果是51.8所以现在">b">等于51,它将打印它
- 我们的虚变量总和现在的值为6加上8使用a+b值运行result()函数的结果是51+8
- 我们在结果函数中再次输入,但现在n为59,Result()函数将询问计算机:59是否小于或等于10
- 正如你所看到的,它不是,所以它将继续到">其他部分">
- 然后,它将加上59模运算的结果10,也就是9的,所以现在a">等于9,它将打印它
- 然后,它将添加59在10之间的除法结果是5.9所以现在">b">等于5,它将打印它
- 我们的虚变量总和现在的值为6+8+9使用a+b值运行result()函数的结果是5+9
- 我们在结果函数中再次输入,但现在n为14,Result()函数将询问计算机:14是否小于或等于10
- 正如你所看到的,它不是,所以它将继续到">其他部分">
- 然后,它将把14模的模运算结果相加10,这是4的,所以现在,">a";等于4,它将打印它
- 然后,它将添加14在10之间的除法结果是1.4所以现在">b";等于1,它将打印它
- 我们的虚变量总和现在的值为6+8+9+4使用a+b值运行result()函数的结果是4+1
- 我们在结果函数中再次输入,但现在n为5,Result()函数将询问计算机:Is5小于或等于10
- 正如您所看到的,5小于10,所以现在它只返回n,即5和,所有递归都将结束
- 所以现在我们的虚变量total现在的值为6+8+9+4+5,没有更多操作,因此它只返回总数32,并将打印出来
希望你能理解所有的解释,如果你使用写作测试会更容易,祝你好运。