自学python笔记7 -- 函数参数与递归函数

#函数参数
def power(x):
    return x * x

print(power(10))

def power(x,n = 2):#n=2为设置的默认参数,默认参数应设置为不变量,如设置成可变量,则每次调用结束,如果该参数变了,下次调用也跟着变了
    sum = 1
    while(n>0):
        sum = sum * x
        n = n - 1
    return sum

print(power(2,3))
print(power(2))
print(power(2,4))

#可变参数
def calc(*numbers):#numbers可以作为一个list或者tuple传进来
    sum = 0
    for n in numbers:
        sum = sum + n
    return sum
    
print(calc(1,2,3,4))

#关键字参数,关键字参数在函数内部自动组转为一个dict
def person(name, age, **other):
    print('name:',name,'age:',age,'other:',other)

person('laizi',23,city = 'sichuang')

#命名关键字参数,限制关键字参数的名字,命名关键字参数必须传入参数名,这和位置参数不同
def person1(name, age, *, city, job):
    print(name, age, city, job)
person1('Bob', 24, city = 'beijing',job = 'engineer')

'''
1:默认参数一定要用不可变对象
2:*args 是可变参数, args 接收的是一个 tuple, **kw 是关键字参数, kw 接收的是一个 dict。
'''
#递归函数:一个函数在内部调用自身本身。存在栈溢出风险
def jiecheng(n):
    if n == 1:
        return 1
    return n * jiecheng(n-1)

print(jiecheng(4))

#尾递归解决栈溢出,在调用一次函数就得出想要的值,不用像上一个函数那样等待下次调用返回的值后在得到想要的值,从而将多个栈变为一个栈
def jiecheng1(n,product):
    if n == 1:
        return product
    else:
        product = n * product
        n = n - 1
        return jiecheng1(n,product)
        
print(jiecheng1(5,1))

#假设有n片,移动次数是f(n).显然f(1)=1,f(2)=3,f(3)=7,且f(k+1)=2*f(k)+1。。此后不难证明f(n)=2^n-1。n=64时,
def Tower_f_Hanoi(n):
    if n == 1:
        return 1
    else:
        n = n -1
        return 2 * Tower_f_Hanoi(n) + 1
        
print(Tower_f_Hanoi(64))
        
 

猜你喜欢

转载自blog.csdn.net/yuer1304587444/article/details/81200851