首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中的递归函数

Python中的递归函数
EN

Stack Overflow用户
提问于 2012-12-05 01:36:36
回答 10查看 18.1K关注 0票数 8

考虑一下Python中的基本递归:

代码语言:javascript
复制
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’的幂,我可以理解这个递归,因为在一行中只有一个递归调用,所以在y==0之前,它会调用自己。同样,所有的结果不都应该是'1‘吗?因为当y==0时,最后执行的命令是'return 1’,因此x没有返回。

代码语言:javascript
复制
def power(x, y):
    if y == 0:
        return 1
    else:
        return x*power(x, y-1)
EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2012-12-05 01:38:56

在表达式fibonacci(number-1) + fibonacci(number-2)中,在调用第二个函数调用之前,必须完成第一个函数调用。

因此,在启动第二个调用之前,必须完成第一个调用的整个递归堆栈。

票数 10
EN

Stack Overflow用户

发布于 2012-12-05 01:40:17

简短的回答

每次Python“看到”fibonacci()时,它都会进行另一个函数调用,直到完成该函数调用后才会继续执行。

示例

因此,假设它正在评估fibonacci(4)

一旦到达return fibonacci(number-1) + fibonacci(number-2)行,它就会“看到”调用fibonacci(number-1)

所以现在它运行的是fibonacci(3) --它还没有看到fibonacci(number-2)。要运行fibonacci(3),它必须弄清楚fibonacci(2)+fibonacci(1)。同样,它运行它看到的第一个函数,这一次是fibonacci(2)

现在,当运行fibonacci(2)时,它终于达到了一个基本情况。它计算返回1fibonacci(1),然后第一次可以继续到fibonacci()调用的+ fibonacci(number-2)部分。fibonacci(0)返回0,然后让fibonacci(2)返回1

既然fibonacci(3)已经获得了从fibonacci(2)返回的值,它就可以继续计算fibonacci(number-2) (fibonacci(1))。

这个过程会一直持续下去,直到所有东西都被评估完毕,并且fibonacci(4)可以返回3

要查看整个评估过程,请遵循下图中的箭头:

票数 16
EN

Stack Overflow用户

发布于 2012-12-05 01:41:06

做'finobacci(number-1)‘完成所有的递归,直到它达到'1’,然后它用'fibonacci(number-2)‘做同样的事情,然后把它们相加?

是的,完全正确。换句话说,下面

代码语言:javascript
复制
return fibonacci(number-1) + fibonacci(number-2)

等同于

代码语言:javascript
复制
f1 = fibonacci(number-1)
f2 = fibonacci(number-2)
return f1 + f2
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13708670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档