考虑Python中的这个基本递归:
def fibonacci(number):
if number == 0: return 0
elif number == 1:
return 1
else:
return fibonacci(number-1) + fibonacci(number-2)
根据斐波那契数列的(n-1)(n-2)函数,这是有道理的。
Python如何执行包含另一个递归的递归,这个递归不在同一代码行内,而是在同一代码行内?“finobacci(number-1)”是否完成所有递归,直到它到达“1”,然后它对“fibonacci(number-2)”做同样的事情,并将它们相加?
作为比较,下面的递归函数将一个数“x”提升为“y”的幂,我可以理解这个递归,def power调用它自己直到y==0,因为在一行中只有一个递归调用。既然当y==0时执行的最后一个命令是“return 1 ”,因此x没有被返回,那么所有的结果不都应该是“1”吗?
def power(x, y):
if y == 0:
return 1
else:
return x*power(x, y-1)
“finobacci(number-1)”是否完成所有递归,直到它达到“1”,然后它与“fibonacci(number-2)”做同样的事情并将它们相加?
是的,这是完全正确的。换句话说,以下
return fibonacci(number-1) + fibonacci(number-2)
相当于
f1 = fibonacci(number-1)
f2 = fibonacci(number-2)
return f1 + f2
在表达式 fibonacci(number-1) fibonacci(number-2)
中,第一个函数调用必须在调用第二个函数调用之前完成。
因此,第一次调用的整个递归堆栈必须在第二次调用开始之前完成。
每次Python“看到”fibonacci()
,它都会进行另一次函数调用,直到完成该函数调用为止。
假设它正在评估fibonacci(4)
。
一旦它到达行< code > return Fibonacci(number-1)Fibonacci(number-2),它就“看到”调用< code>fibonacci(number-1)。
所以现在它运行的是斐波那契(3)
-它还没有看到菲波那奇(2号)
。要运行fibonacci(3)
,它必须计算出斐波那契(2)和斐波那奇(1)
。同样,它运行它看到的第一个函数,这一次是斐波那契(2)
。
现在,当<code>fibonacci(2)fibonacci(1),返回1
,然后第一次可以继续执行fibonac契()调用的
斐波那契(数字-2)
部分fibonacci(0)
返回0
,然后让斐波那契(2)
返回1。
返回的值,它可以继续计算< code > Fibonacci(number-2)(< code > Fibonacci(1))。现在< code>fibonacci(3)
已经获得了从< code>fibonacci(2)
这个过程一直持续到一切都被评估, 斐波那契(4)
可以返回 3
.
若要查看整个评估的进展情况,请按照下图中的箭头进行操作:
我试图在Python中做一个函数,它接受树的任意节点,并根据节点给出的列表填充列表。 考虑到以下绘制糟糕的树: 例如,如果我们从节点5开始,我们应该得到: 包含具有相同父节点的所有节点的列表,包括我们从(4和5)开始的节点。 任何子节点,但不是其子节点(6) 父节点和具有相同父节点的任何父节点,以及它们的父节点,等等,直到我们到达根节点,但不包括根节点(在本例中只有2和3个,但如果树更深,我们开始
问题内容: 我很难理解修饰的递归函数是如何工作的。对于以下代码段: 输出为: 第一个打印f(n),因此很自然,每次递归调用f(n)时,它都会打印“原始”。 第二个打印def_f(n),因此当n传递给包装器时,它将递归调用f(n)。但是包装器本身不是递归的,因此仅打印一个“装饰”。 第三个让我感到困惑,这与使用装饰器@dec相同。为什么修饰的f(n)也调用包装器五次?在我看来,def_f = dec
问题 你想在一个函数中调用相同的函数。 解决方案 使用一个命名函数: ping = -> console.log "Pinged" setTimeout ping, 1000 若为未命名函数,则使用 @arguments.callee@: delay = 1000 setTimeout((-> console.log "Pinged" setTimeout arg
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。 举个例子,我们来计算阶乘n! = 1 x 2 x 3 x ... x n,用函数fact(n)表示,可以看出: fact(n) = n! = 1 x 2 x 3 x ... x (n-1) x n = (n-1)! x n = fact(n-1) x n 所以,fact(n)可以表示为n x fact(n-1),
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。 举个例子,我们来计算阶乘n! = 1 x 2 x 3 x ... x n,用函数fact(n)表示,可以看出: fact(n)=n!=1\times2\times3\times\cdot\cdot\cdot\times(n-1)\times n=(n-1)!\times n=fact(n-1)\times n
本文向大家介绍如何在Python中编写递归函数?,包括了如何在Python中编写递归函数?的使用技巧和注意事项,需要的朋友参考一下 一个递归 函数是它的执行过程中调用自身的函数。这使函数可以重复多次,输出结果和每次迭代的结束。递归与无限有关。 下面是一个递归函数示例,用于查找整数的阶乘。 数字的阶乘 是从1到该数字的所有整数的乘积。 例如,阶乘9(表示为9!)为1 * 2 * 3 * 4 *