递归函数示例说明

时间:2019-01-09 14:30:18

标签: python recursion

请向我解释一下

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;

3 个答案:

答案 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(4)的递归调用如下所示recursion tree image

类似地,您可以将其用于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。