Recursion 重复加法递归
下面是一段代码,它使用递归(将Recursion 重复加法递归,recursion,Recursion,下面是一段代码,它使用递归(将a的值取为7)生成11的输出。我不知道该怎么做。有谁能解释一下,通过调用自身生成这个输出,函数是如何叠加的 int fun(int a) { if( a <= 1) return a; return fun(a-1) + fun(a-2) + fun(a-3); } intfun(inta) { 如果(a让我们在研究它的工作原理时对此感到有趣。我将替换Pytho
a
的值取为7)生成11的输出。我不知道该怎么做。有谁能解释一下,通过调用自身生成这个输出,函数是如何叠加的
int fun(int a)
{
if( a <= 1)
return a;
return fun(a-1) + fun(a-2) + fun(a-3);
}
intfun(inta)
{
如果(a让我们在研究它的工作原理时对此感到有趣。我将替换Python等效代码,原因将在下一步中介绍:
def fun(a):
if a <= 1:
return a
return fun(a - 1) + fun(a - 2) + fun(a - 3)
b = fun(7)
print(b)
现在有趣的是,我们将对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
%
这让我们了解了它是如何工作的。所有数字最终都会减少到一个-1、0和/或1的序列,这是我们的结果。这三个值都会自我评估,不会进一步扩展。知道:
-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
%
这证实了我们是通过对递归产生的所有这些小数字求和得到结果的。试着用笔和纸跟踪这个函数的执行情况,并展示您所做的工作。谢谢您的努力,伙计!这真的很有帮助。
% 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
%