python的&众不同之处(4)

python函数

官方函数
http://docs.python.org/2/library/functions.html#abs

定义函数

定义函数

def student(name):
    print 'name:',name

设置默认参数(不输入参数时,则使用默认参数值)

def student(name,age=18)
    print 'name:',name
    print 'age:',age

传入可变参数(这样函数就可以传入多个参数)

def sum(*num):
    sum = 0
    for n in num:
      sum = sum +n
    return sum

递归函数

def fact(n):
    if n==1:
        return 1
    return n * fact(n - 1)

===> fact(5)
===> 5 * fact(4)
===> 5 * (4 * fact(3))
===> 5 * (4 * (3 * fact(2)))
===> 5 * (4 * (3 * (2 * fact(1))))
===> 5 * (4 * (3 * (2 * 1)))
===> 5 * (4 * (3 * 2))
===> 5 * (4 * 6)
===> 5 * 24
===> 120

递归调用的次数过多,会导致栈溢出。解决递归调用栈溢出的方法是通过尾递归优化
尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。这样,编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。

尾递归

def fact(n):
    return fact_iter(n, 1)

def fact_iter(n, total):
    if n == 1:
        return total
    return fact_iter(n - 1, n * total)

===> fact_iter(5, 1)
===> fact_iter(4, 5)
===> fact_iter(3, 20)
===> fact_iter(2, 60)
===> fact_iter(1, 120)
===> 120

学习参考

http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000

猜你喜欢

转载自blog.csdn.net/sinat_33859977/article/details/52578421