我试图更好地理解递归和return语句的工作方式。因此,我看的是一段代码,用来识别与给定项相关联的斐波那契数--在本例中是4。我很难理解else的说法。
def f(n):
if n == 0:
return 0
if n == 1:
return 1
else:
return f(n-1) + f(n-2)
f(4)
我尝试使用Visualize Python检查每一步发生了什么,但当它碰到else语句时,我就迷路了。
它看起来像是取n的值,然后减去1,创建一个新的n值3,并返回到函数定义中。因此它似乎只是从else语句中的第一个函数返回值。然而,编写else语句是为了返回2个函数f(n-1)+f(n-2)的和,在这种情况下,我以为返回值是5?你甚至可以把2个功能加在一起吗?
事先谢谢你的帮助。
下面是Visualize Python Sum of 2函数中的代码链接
添加一些print语句还可以帮助澄清顺序:
def f(n):
print("Number received:", n)
if n == 0:
return 0
if n == 1:
return 1
else:
print("---- First recursion ----")
a = f(n-1)
print("---- Second recursion ----")
b = f(n-2)
print(" a=:",a,"; b=",b,"; returning:", a+b)
return a + b
print("Final f(4)=", f(4))
输出:
Number received: 4
---- First recursion ----
Number received: 3
---- First recursion ----
Number received: 2
---- First recursion ----
Number received: 1
---- Second recursion ----
Number received: 0
a=: 1 ; b= 0 ; returning: 1
---- Second recursion ----
Number received: 1
a=: 1 ; b= 1 ; returning: 2
---- Second recursion ----
Number received: 2
---- First recursion ----
Number received: 1
---- Second recursion ----
Number received: 0
a=: 1 ; b= 0 ; returning: 1
a=: 2 ; b= 1 ; returning: 3
Final f(4)= 3
有疑问的时候,就把它拆开。
树流实际上与实际的控制流是反直觉的,但是一旦你理解了调用的顺序,它就变得更加清晰了。这里需要理解的是,您不断地将一个较大的计算分解为一个较小的计算的总和,当您遇到基本情况(if
语句)时,您就停止了。现在你可以进行所有的小计算,把那些小计算的结果组合起来,形成一个更大、更大的结果,直到你得到你的最终答案。
每次递归调用命中基本大小写时,它将html" target="_blank">返回1或0,这取决于命中的大小写。此值将返回给上一个调用方。要理解,请考虑:
f(1)3 + f(0)3
请注意,下标表示递归调用树的深度。呼叫由F(2)2
进行。首先计算F(1)3
,并且1
返回F(2)2
。然后计算f(0)3
,并且0
返回f(2)2
。两个返回值相加,结果为1
。
f(2)2
然后将1
返回给调用它的人,在本例中,它恰好是f(3)1
。f(3)1
称为f(2)2+f(1)2
,同时此其他f(1)2
也将1
返回给f(3)1
,后者现在将其与f(2)2
的结果相加,以形成2
。
f(3)1
现在将2
传递给其调用方f(4)0
,后者碰巧调用了f(3)1+f(2)1
...
另一种方法是从实际进行的第一个函数调用开始:f(4)0
。
f(4)0
计算f(3)1+f(2)1
。但是要计算f(3)1
,它需要知道f(2)2+f(1)2
,类似地,要计算f(2)1
,它需要知道f(1)2+f(0)2
,依此类推。
Fibonacci 数列(斐波纳契数列): 0, 1, 1, 2, 3, 5, 8, 13, 21, ... 以0和1开头.后续每个 Fibonaeei 数是前面两个 Fibonacci 数的和。 自然界中就有这种数列,描述一种螺线形状。相邻Fibonacci数的比是一个常量1.618…,这个 数在自然界中经常出现,称为黄金分割(golden ratio或golden mean)。人们发现,黄金
对于下面的代码,我得到了这个错误:对于第一个参数,没有已知的从“int”到“const std::vector ,std::allocator >”的转换。谁能指出这个错误吗?
Fibonacci系列通过添加两个先前的数字来生成后续数字。 Fibonacci系列从两个数字开始F 0 & F 1 。 F 0和F 1的初始值可分别取0,1或1,1。 斐波那契系列满足以下条件 - F<sub>n</sub> = F<sub>n-1</sub> + F<sub>n-2</sub> 因此,Fibonacci系列看起来像这样 - F 8 = 0 1 1 2 3 5 8 13 或者,
我一直在努力学习SML NJ(standard ML New Jersey),我遇到了一个我理解为递归的函数,但我不太明白为什么这个函数会返回它的值。 功能: 我知道如果sum的值为0,那么将返回0。然而,我不明白第二部分是如何工作的。 测试函数: 我相信它应该计算如:sum n=(n(sum(n-1))),所以给定n=2,(2(sum(2-1))= 但是,给定n=4,(4(和(4-1))= 如果
Question lintcode: (366) Fibonacci Problem Statement Find the _N_th number in Fibonacci sequence. A Fibonacci sequence is defined as follow: The first two numbers are 0 and 1. The i th number is the s
本文向大家介绍C++项目求Fibonacci数列的参考解答,包括了C++项目求Fibonacci数列的参考解答的使用技巧和注意事项,需要的朋友参考一下 【项目:求Fibonacci数列】 Fibonacci数列在计算科学、经济学等领域中广泛使用,其特点是:第一、二个数是1,从第3个数开始,每个数是其前两个数之和。据此,这个数列为:1 1 2 3 5 8 13 21 34 55 89 ……,请设计程