这是一个代码,该代码通过使用递归(将a
的值设为7)将输出生成为11。我找不到方法。谁能解释我如何通过调用自身产生的输出来堆叠功能?
int fun(int a)
{
if( a <= 1)
return a;
return fun(a-1) + fun(a-2) + fun(a-3);
}
答案 0 :(得分:1)
在我们研究它的工作原理时,让我们玩得开心。我将替换Python等效代码的原因将在下一步显示:
def fun(a):
if a <= 1:
return a
return fun(a - 1) + fun(a - 2) + fun(a - 3)
b = fun(7)
print(b)
测试
% python3 test.py
11
%
现在变得很有趣,因为我们将对我们的Python代码进行一些小的更改。代替:
return a
我们将写:
return "+" + str(a)
现在,当我们运行代码时,我们得到:
% python3 test.py
+1+0+-1+1+0+1+0+-1+1+1+0+-1+1+0+1+0+-1+1+0+-1+1+0+1+0+-1+1+1+0+-1+1+0+1+0+-1+1+0+1+0+-1+1+1+0+-1+1+0+1+0+-1+1+0+-1+1+0+1+0+-1+1
%
这使我们对它的工作方式有所了解。最终所有的数字都减少为-1s,0s和/或1s的序列,这就是我们的结果之和。这三个值均对自身求值,因此不会进一步扩展。知道:
-1 -> +-1
0 -> +0
1 -> +1
我们可以看到:
2 -> 2-1 2-2 2-3 -> 1 0 -1 -> +1+0-1 -> 0
3 -> 3-1 3-2 3-3 -> 2 1 0 -> (+1+0-1)+1+0 -> 1
等等。我们可以通过该程序运行6、5和4,并将这些结果连接起来以获得7的结果:
6 +1+0+-1+1+0+1+0+-1+1+1+0+-1+1+0+1+0+-1+1+0+-1+1+0+1+0+-1+1+1+0+-1+1+0
5 +1+0+-1+1+0+1+0+-1+1+1+0+-1+1+0+1+0+-1
4 +1+0+-1+1+0+1+0+-1+1
7 +1+0+-1+1+0+1+0+-1+1+1+0+-1+1+0+1+0+-1+1+0+-1+1+0+1+0+-1+1+1+0+-1+1+0[ ]+1+0+-1+1+0+1+0+-1+1+1+0+-1+1+0+1+0+-1[ ]+1+0+-1+1+0+1+0+-1+1
最后,我们将在修改后的Python程序的末尾添加一行:
print(eval("0" + b))
这会将零,一和减的字符串求和返回一个数字:
% python3 test.py
+1+0+-1+1+0+1+0+-1+1+1+0+-1+1+0+1+0+-1+1+0+-1+1+0+1+0+-1+1+1+0+-1+1+0+1+0+-1+1+0+1+0+-1+1+1+0+-1+1+0+1+0+-1+1+0+-1+1+0+1+0+-1+1
11
%
这证实了通过对所有这些递归产生的小数字求和,得出我们的结果。