请向我解释一下
void theUIPathOptionslistBox_SelectedIndexChanged(object sender,
SelectionChangedEventArgs e)
{
theNewTextBox.Clear();
foreach (object selectedItem in theUIPathOptionslistBox.SelectedItems)
{
theNewTextBox.AppendText(selectedItem.ToString() + Environment.NewLine);
}
}
theUIPathOptionslistBox.SelectionChanged +=
theUIPathOptionslistBox_SelectedIndexChanged;
答案 0 :(得分:1)
此函数的作用是获取斐波那契数列的第N个元素(从索引0开始)。
斐波那契数列如下:1,1,2,3,5,8,..
该系列的特色在于,每个元素都是从第3个元素开始的最后两个元素的和。第一个和第二个元素将始终为1。
因此,第三个元素=第一个元素+第二个元素= 1 + 1 = 2,
第4个元素=第3个元素+第2个元素= 1 + 2 = 3,依此类推。
所以当您执行fibi(3)时会发生什么 fibi(3)返回(fibi(2)+ fibi(1))。
fibi(2)返回(fibi(1)+ fibi(0))
且fibi(1)= 1和fibi(0)= 1。 因此,这些值向上传播。 因此fibi(2)= 1 + 1 = 2 并且fibi(3)= 2+ fibi(1)= 2 + 1 = 3。
这样,您的递归将使用基值,并返回ans。
类似地,您可以将其用于fibi(9)
答案 1 :(得分:0)
斐波纳契数列是一个序列,其中每个元素等于两个先前元素的总和。 给定a [0] = 1和a [1] = 1来找到a [2],我们将求和索引0,1-> a [2] = a [0] + a [1]。 如果要查找序列中的n个元素,则必须计算n之前的所有元素并对每个元素求和,一种实现方法是递归。
在您发布的函数中,它检查给定参数x是否等于0或1。如果返回,则返回值1;否则返回带有参数x-1和x-的对fibi的调用总和。 2。最终,该函数将计算所有总和并将它们加起来,直到找到所需的x值。
如果您想进一步了解幕后发生的事情,请阅读更多信息:https://realpython.com/python-thinking-recursively/
希望有帮助!
答案 2 :(得分:0)
递归函数调用是指某个函数为了执行某些任务而调用自身时。
例如,这段代码用于计算斐波那契数列的第n个成员,其主要要点是该数列的每个数字都是前两个数之和:
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765
F0 F1 F2 F3 F4 ...
例如,F3是通过将F1和F2(分别为1和1)相加来计算的。F4是F3 + F2,依此类推。
首先,我们可以使用常规函数对其进行解释,而无需递归调用:
def fibonacci(n):
if(n == 1 or n == 2): # The first two numbers of the fibonacci sequence are 1
return 1
else: # If the user asked for a number that is not the first or the second, we need to calculate it differently, because we always start with two numbers in the fibonacci sequence - 1 and 1
numbers = [1, 1] # We start the fibonacci sequence with two numbers
for i in range(2, n):
fibonacci_number = numbers[len(numbers) - 1] + numbers[len(numbers) - 2] # We take the previous two numbers and use them to calculate the next number in the sequence
if(i == n - 1): # If we reached the number we wanted to find, return the calculated number
return fibonacci_number
else: # Otherwise, append it to the list and use it for further calculations
numbers.append(fibonacci_number)
print(fibonacci(9))
这将输出34,这是正确的。现在,我们可以通过递归调用来缩短它。
def fibonacci(n):
if(n == 1 or n == 2):
return 1
else:
return fibonacci(n - 1) + fibonacci(n - 2)
print(fibonacci(9))
由于递归,这要短得多。
例如,如果我们调用数字3的函数,该函数最终将返回数字2,则行动计划将如下所示:
1)称为fibonacci(3)
2)if(n == 1或n == 2),这不会触发,因此我们跳转到 else
下的代码块3)返回fibonacci(n-1)+ fibonacci(n-2),这里我们将再次调用该函数,但是两次,因为我们需要斐波那契序列的最后两个数字
4)fibonacci(3-1)将返回1,因为fibonacci(2)为1,而fibonacci(2-1)将返回1,因为fibonacci(1)为1
5)返回1 +1(又名2),并且函数调用为 OVER
递归函数需要一个条件来停止递归调用自己,在这种情况下,它将是 if(),如果fibonacci函数降为1或2,则返回1。