十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
就是递归到什么时候该停下来。
企业建站必须是能够以充分展现企业形象为主要目的,是企业文化与产品对外扩展宣传的重要窗口,一个合格的网站不仅仅能为公司带来巨大的互联网上的收集和信息发布平台,创新互联面向各种领域:不锈钢雕塑等成都网站设计、营销型网站解决方案、网站设计等建站排名服务。
比如斐波那契数列,1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n=2,n∈N*)。
可以看到他的规律为,第N个数的值为第N-1和第N-2个数的值之和。比如要求F(10),得先求F(9)和F(8),要求F(9)得先求F(8)和F(7)……如此递归下去,但是F(1)和F(2)的值始终是1,那n=1或者n=2就可以作为递归的终止条件。
def fib(n):
if n=2 :
return 1
else:
return fib(n-1)+fib(n-2)
这个是递归函数,递归函数必须有收敛条件,收敛条件是x==1
一直递归到x==1就可以了
你要知到第n个人的年龄,其实就是第一个人的年龄加上n-1个2对吧,也就是n-1个人的年龄+2,再加上n-2个人的年龄+2,一直加到第一个人的年龄。上面的函数调用,一直没有返回而是一层一层的调用,知道x==1的时候才会返回。每次都会调用堆栈保存局部变量。
如果递归次数过多,系统就会有可能内存不足,不信你增大人数,比如计算100000个人的年龄可能会溢出,此为堆栈溢出,也就是没有堆栈空间了
def Sum(m):
#函数返回两个值:递归次数,所求的值
if m==1:return 1,m
return 1+Sum(m-1)[0],m+Sum(m-1)[1]
cishu=Sum(10)[0]
print cishu
def Sum(m,n=1):
... if m==1:return n,m
... return n,m+Sum(m-1,n+1)[1]
print Sum(10)[0]
10
print Sum(5)[0]
5
首先我们要了解一下什么是递归。
递归法,递归法就是利用上一个或者上几个状态来求取当前状态的值(个人看法)。也可以说成函数自己调用自己的一种解决问题的策略。因此递归法通常是依托函数来实现的,递归函数总是会有一个出口,我们在解决递归问题时,只需要找出递归的关系式以及递归函数的出口(这两个可以说是递归函数的核心了)。下面我将在这里举求斐波那契值的例子带领着大家具体的实践一下递归法。
很显然递归函数的递推式是:fib(n) = fib(n-1)+fib(n-2)。
递归函数的出口是当n为1时返回1,当n为0时返回0。
最后递归函数的核心代码就可以写出了:
然后总的代码就是:
具体思路如下:
语句 return fib(n-1)+fib(n-2)的意思就是向前求斐波那契值,直到n-1=1,n-2=0
因为只有第1个和第0个斐波那契值是确定的
例:
当n=3时
第一次调用函数fib会执行第三条语句(因为n1)这样求回返回fib(2)+fib(1)
第二次调用函数时,因为21所有会返回fib(1)+fib(0);因为1不大于1,所以调用函数时
会执行第二条语句返回1值。
第三次调用函数,会执行第一和第二条语句,依次返回0和1从而求得fib(2)
fib(3)=fib(2)+fib(1)
fib(2)=fib(1)+fib(0)
即fib(3)=fib(1)+fib(0)+fib(1)=2*fib(1)+fib(0)
python用递归函数求1+2+3+4+5的值的方法:
1、写出临界条件
2、找这一次和上一次的关系
3、假设当前函数已经能用,调用自身计算上一次的结果,再求出本次的结果
代码实现如下: