To find the value of g(30), find the value of g(29), g(28), and g(27)
To find the value of g(29), find the value of g(28), g(27), and g(26)
To find the value of g(28), find the value of g(27), g(26), and g(25)
...
(repeat until all sub-finds have completed)
递归函数可以理解为
迭代函数从另一端开始
^{pr2}$这看起来类似于fibonacci级数问题,以迭代的方式实现是非常重要的。它看起来也像是家庭作业,所以我会把fibonacci迭代的步骤贴出来,你应该能够把它应用到你的问题上。在
如果你不知道,斐波那契的定义如下:
我们来分析一下}。对于
^{pr2}$fib(n)
。首先我们看到有两种不同的情况:n <= 1
和{n <= 1
,fib(n)
没有依赖关系,因此我们可以计算:现在我们要处理另一个案子。让我们首先做一个依赖性分析。对于},我们需要什么?我们调用}。在迭代语言中,这是前面的两个值。所以很明显,我们需要跟踪这些。我们将从这一点上的两个小案例开始:
fib(n)
和{fib(n-1)
和{我希望这是显而易见的。然后我们按照递归方法中解析函数的顺序来解析它们。当展开递归并分析函数时,我们发现第一个要计算的非trival值当然是
fib(2)
。然后fib(3)
依此类推,直到到达n
。由于递归方法,多个值需要多次求值,但在迭代方法中不需要这样做。将这些值相加,得到以下代码:唯一缺少的是返回值,在循环结束时它只是
curr
。正如我们预先检查xrange(2, n+1)
并检查n <= 1
时,循环将至少运行一次,因此curr
将在循环之外定义。在(这是我的第一个家庭作业答案;社区可能会给我反馈,如果我宠坏了太多,我本可以做得更好)
相关问题 更多 >
编程相关推荐