2006年03月20日 星期一 16:42
def fib(n): print 'n =', n if n > 1: return n * fib(n - 1) else: print 'end of the line' return 1 关于这样一个很简单的例子。 我对循环思路上还有些困惑 以下是我的思路: fib(5)调用函数以后 执行到return n * fib(n - 1)就会停止,执行流程会暂停当前的函数运行再行另开流程处理fib(n-1) 直到最后n == 1 然后打印end of the line 那么此时其他流程都接到了上一个流程回来的反馈. 那么 return n * fib(n - 1)一句最后都将返回到最开始的那个流程 return语句实际上也就会是return 5*4*3*2*1 思路不知道正确否. 下面return 1是取返回真?具体又是什么意义呢? -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060320/150f495d/attachment.htm
2006年03月20日 星期一 16:58
Err,这个不叫循环,叫递归. fib(5)调用函数以后执行到return n * fib(n - 1)时,程序并不是停止,而是再次进入fib函数进行计算,与前一次不同的是实际参数的值变化了. 下面的return 1并不是返回真的意思, 但凡递归的程序都一定要有一个递归的结束条件,否则递归永远不会结束,将会引起栈溢出. 在这里,n等于1就是递归结束条件,而return 1中的1表示fib(1)的结果是1,也就是1的阶乘结果为1 -- Best Regards, Leo Jay
2006年03月20日 星期一 17:02
一个很简单的递归,建议你看些讲基础原理的书 On 3/20/06, 风向标 <vaneoooo at gmail.com> wrote: > > def fib(n): > print 'n =', n > if n > 1: > return n * fib(n - 1) > else: > print 'end of the line' > return 1 > > 关于这样一个很简单的例子。 > 我对循环思路上还有些困惑 > 以下是我的思路: > > fib(5)调用函数以后 > 执行到return n * fib(n - 1)就会停止,执行流程会暂停当前的函数运行再行另开流程处理fib(n-1) > 直到最后n == 1 > 然后打印end of the line > > 那么此时其他流程都接到了上一个流程回来的反馈. > 那么 return n * fib(n - 1)一句最后都将返回到最开始的那个流程 > return语句实际上也就会是return 5*4*3*2*1 > > 思路不知道正确否. > 下面return 1是取返回真?具体又是什么意义呢? > > > _______________________________________________ > python-chinese > Post: send python-chinese at lists.python.cn > Subscribe: send subscribe to python-chinese-request at lists.python.cn > Unsubscribe: send unsubscribe to python-chinese-request at lists.python.cn > Detail Info: http://python.cn/mailman/listinfo/python-chinese > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20060320/24428e41/attachment.htm
Zeuux © 2025
京ICP备05028076号