递归中的return (python)

参考链接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

猜你喜欢

转载自blog.csdn.net/lamanchas/article/details/121489050