Python论坛  - 讨论区

标题:[python-chinese] 请教! fibonacci 递归+字典

2005年09月18日 星期日 05:18

xuande i3655 at 126.com
Sun Sep 18 05:18:07 HKT 2005


请看下边的代码:

def fibonacci(n):
if previous.has_key(n):
return previous[n]
else:
newValue = fibonacci(n-1) + fibonacci(n-2)
previous[n] = newValue
return newValue


请问 previous[n] = newValue 这句,

每次应该在

newValue = fibonacci(n-1) + fibonacci(n-2)

全部递归 完后后才给 previous[n] 赋值

最后 return newValue,

按照上述理解,只能存储最后的总和啊!

但是实际运行后发现确实每次都存储了,

那么 previous[n] = newValue 是如何存储 每次 递归 的值,

所以 比 下边的程序效率高,


def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)

但按照我的上述理解 两段程序 应该没有区别,当然我错了,所以请各位python
fans 请教!


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年09月18日 星期日 06:02

panhudie nirvana117 at gmail.com
Sun Sep 18 06:02:25 HKT 2005

递归看不懂 最好debug一下

On 9/18/05, xuande <i3655 at 126.com> wrote: 
> 
> 
> 
> 请看下边的代码:
> 
> def fibonacci(n):
> if previous.has_key(n):
> return previous[n]
> else:
> newValue = fibonacci(n-1) + fibonacci(n-2)
> previous[n] = newValue
> return newValue
> 
> 
> 请问 previous[n] = newValue 这句,
> 
> 每次应该在
> 
> newValue = fibonacci(n-1) + fibonacci(n-2)
> 
> 全部递归 完后后才给 previous[n] 赋值
> 
> 最后 return newValue,
> 
> 按照上述理解,只能存储最后的总和啊!
> 
> 但是实际运行后发现确实每次都存储了,
> 
> 那么 previous[n] = newValue 是如何存储 每次 递归 的值,
> 
> 所以 比 下边的程序效率高,
> 
> 
> def factorial(n):
> if n == 0:
> return 1
> else:
> return n * factorial(n-1)
> 
> 但按照我的上述理解 两段程序 应该没有区别,当然我错了,所以请各位python
> fans 请教!
> 
> 
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20050918/51e31225/attachment.htm

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年09月18日 星期日 11:44

xuande i3655 at 126.com
Sun Sep 18 11:44:14 HKT 2005

panhudie 写道:

> 递归看不懂 最好debug一下
>
> On 9/18/05, *xuande* <i3655 at 126.com i3655 at 126.com>> wrote:
>
>
>
>     请看下边的代码:
>
>     def fibonacci(n):
>     if previous.has_key(n):
>     return previous[n]
>     else:
>     newValue = fibonacci(n-1) + fibonacci(n-2)
>     previous[n] = newValue
>     return newValue
>
>
>     请问 previous[n] = newValue 这句,
>
>     每次应该在
>
>     newValue = fibonacci(n-1) + fibonacci(n-2)
>
>     全部递归 完后后才给 previous[n] 赋值
>
>     最后 return newValue,
>
>     按照上述理解,只能存储最后的总和啊!
>
>     但是实际运行后发现确实每次都存储了,
>
>     那么 previous[n] = newValue 是如何存储 每次 递归 的值,
>
>     所以 比 下边的程序效率高,
>
>
>     def factorial(n):
>     if n == 0:
>     return 1
>     else:
>     return n * factorial(n-1)
>
>     但按照我的上述理解 两段程序 应该没有区别,当然我错了,所以请各位
>     python
>     fans 请教!
>
>
>
>------------------------------------------------------------------------
>
>_______________________________________________
>python-chinese list
>python-chinese at lists.python.cn
>http://python.cn/mailman/listinfo/python-chinese
>  
>
理解了,谢谢啊!主要是没搞清递归的中堆栈的概念。


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号