鱼C论坛

 找回密码
 立即注册
查看: 3000|回复: 6

[已解决]递归函数中的变量问题,求大神帮忙解答啊

[复制链接]
发表于 2017-2-15 15:04:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 编程一小白 于 2017-2-15 17:43 编辑

在《零基础》023讲课后题“将十进制转化成二进制,要求结果是字符串”中,亲爱的小甲鱼老师给出了如下答案:

def Dec2Bin(dec):
    result = ''
   
    if dec:
        result = Dec2Bin(dec//2)
        return result + str(dec%2)
    else:
        return result


关于这个递归我有一个疑问:

Dec2Bin(dec)函数中在一开始定义了一个 result='' ,在这个例子中,在每一层递归中并没有重新定义result='' ,而是继承了上一层 result 的值。

为什么这个 result 在递归中没有被再次定义为 ‘’?
在什么情况下,函数中定义的初试值,会在接下来每一层递归中被重新定义,在什么情况下不会?
最佳答案
2017-2-15 21:30:10
每次递归result都是‘’啊,return回来的result只是赋值给了dec,并不是赋值给了result,比如5
5=Dec2Bin(2)+‘1’=Dec2Bin(1)+‘0’+‘1’=‘1’+‘0’+‘1’
显示出来就是101了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-2-15 15:04:55 | 显示全部楼层
求大神出面解答啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-15 21:30:10 | 显示全部楼层    本楼为最佳答案   
每次递归result都是‘’啊,return回来的result只是赋值给了dec,并不是赋值给了result,比如5
5=Dec2Bin(2)+‘1’=Dec2Bin(1)+‘0’+‘1’=‘1’+‘0’+‘1’
显示出来就是101了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-15 22:36:15 | 显示全部楼层
其实这个递归可以这样写,我觉得结构更清晰,也便于理解
  1. # -*- coding: utf-8 -*-
  2. def Dec2Bin(n,result=''):
  3.     if n:
  4.         result += str(n%2)
  5.         return Dec2Bin(n//2,result)
  6.     else:
  7.         return ''.join(result[::-1])
复制代码
  1. print(Dec2Bin(10))
  2. >>>1010
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-16 11:07:25 | 显示全部楼层
余欲渔 发表于 2017-2-15 21:30
每次递归result都是‘’啊,return回来的result只是赋值给了dec,并不是赋值给了result,比如5
5=Dec2Bin ...

soga,知道了,谢谢你
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-16 11:57:55 | 显示全部楼层
return 哪里就是一直递归。每次都是赋值后找下一层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-16 12:15:45 | 显示全部楼层
result每一次确实都赋初值了呀,只是你把过程没看的太清楚
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-25 10:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表