重复加法递归

时间:2018-10-11 21:06:14

标签: recursion

这是一个代码,该代码通过使用递归(将a的值设为7)将输出生成为11。我找不到方法。谁能解释我如何通过调用自身产生的输出来堆叠功能?

int fun(int a)
        {
          if( a <= 1)
             return a;
          return fun(a-1) + fun(a-2) + fun(a-3);
        }

1 个答案:

答案 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
%

这证实了通过对所有这些递归产生的小数字求和,得出我们的结果。