|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 鸣君 于 2017-12-20 09:06 编辑
代码一:
- def func(n):
- l=''
- if n:
- l=func(n//2)
- l=l+str(n%2)
- return l
- else:
- return l
- print (func(10))
复制代码
代码二:
- def get_digits(n):
- l=[]
- if n:
- get_digits(n // 10)
- l.insert(0,n%10)
- return l
- else:
- return l
- print (get_digits(100))
复制代码
python 3,windows系统,这是23、24的课后题0和1,为什么代码一的字符串l在每次调用函数时不会重置l='',而代码二的列表l在每次调用函数时会重置l=[]?
func递归调用进入时也会重置,但因为有返回值,所以每层的结果被重新返回上一层调用了,所以上一层会有之前的结果,get_digits每次递归的结果都没有返回上一层呀,所以每一层的递归结果都是独立的,要把i=[]放在函数外面,这样每次的结果都操作的是一个变量,而不是各个递归内的局部变量,因为递归从最高位开始返回,用l.append(n%10)顺序才是按高位到低位
|
|