参考链接:python 递归中的坑: return得到None_qq878594585的博客-CSDN博客
问题描述:在Python中使用递归,调用函数自身时,无法得到期望的结果,结果得到None。
问题背景:leetcode 231—— 2的幂(此题有多种解法,此处选用了递归)
给你一个整数 n,请你判断该整数是否是 2 的幂次方。
如果是,返回 true ;否则,返回 false 。
即:如果存在一个整数 x 使得 n == 2^x ,则认为 n 是 2 的幂次方。
其中 -2^31<n<2^31-1。
代码:
def isPowerOfTwo(self, n: int) -> bool:
if n == 0:
return False
elif n == 1:
return True
elif n%2 == 0:
# ❎ ① self.isPowerofTwo( n//2 )
# ✅ ② return self.isPowerOfTwo( n//2 )
return self.isPowerOfTwo( n//2 )
else:
return False
Python语法: return语句
一般的,函数执行遇到return就会结束,并返回一个值给调用函数处。
上面1和2 的区别,如下图所示:
可以看到,语句1直接写函数名,当递归到内层,调用自身的时候,有一个return True给到了def这个最外层,但是在def这一层没有return语句,所以无法把那个True值输出来。
而python规定,函数中如果没有return语句,Python默认返回一个none对象。
使用语句2 添加return,最外层的函数才有返回值,正确返回。
End