python 用递归方式列表 输出小于N的所有偶数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 用递归方式列表 输出小于N的所有偶数相关的知识,希望对你有一定的参考价值。

N是用户输入的任意自然数
单独写if n>=2 and n%2==0
return evens(n-2) + [n]
或者单独是奇数的是可以运行的 两个合并起来 就显示nonetype

这种问题不明白为什么要用递归来做, Python中的递归如果不做特殊处理, 你这输入的数字大一点就会抛异常.

import sys
class TailRecurseException:
    def __init__(self, args, kwargs):
        self.args = args
        self.kwargs = kwargs
def tail_call_optimized(g):
    def func(*args, **kwargs):
        f = sys._getframe()
        if f.f_back and f.f_back.f_back and f.f_back.f_back.f_code == f.f_code:
            raise TailRecurseException(args, kwargs)
        else:
            while 1:
                try:
                    return g(*args, **kwargs)
                except TailRecurseException, e:
                    args = e.args
                    kwargs = e.kwargs
    func.__doc__ = g.__doc__
    return func
@tail_call_optimized
def fun(n):
    if n == 2:
        sys.stdout.write('\\n')
        return
    elif n % 2 == 1:
        n = n - 1
    else:
        n = n - 2
    sys.stdout.write(' '.format(n))
    fun(n)
N = int(sys.stdin.readline())
fun(N)

参考技术A def check(x):
    return (x < N and x % 2 == 0)

def func_A(lst, check):
    if len(lst):
        if check(lst[0]):
            print lst[0]
        func_A(lst[1:], check)
    else:
        return

追问

if len(lst):
if check(lst[0]):
print lst[0]
是什么意思 为什么要长度

追答

判断空数组时退出。这道题的核心就在于让你了解怎么递归

-- 递归一定要有退出逻辑的


之前的理解似乎不对你的题目


def evens(n):
    n -= (n % 2) and 1 or 2
    if n <= 0:
        return
    print n
    evens(n)

追问

谢谢,那我写的那个思路是哪里出问题了?为什么加上奇数的判断就一直提示nonetype

追答
def evens(n):
    if n > 2 and n % 2:
        return evens(n-1) # 奇数入口从n-1开始
    elif n>=2:
        return evens(n-2) + [n]
    else:
        return []

本回答被提问者采纳

用python输出100以内的偶数积

参考技术A 用python计算100以内所有偶数的积的代码如下
a = 1
sum = 1
while a <= 100:
if a % 2 == 0:
sum *= a
a *= 1
print(sum)

以上是关于python 用递归方式列表 输出小于N的所有偶数的主要内容,如果未能解决你的问题,请参考以下文章

我想使用递归函数根据用户输入 N 计算前 N 个偶数的总和

n的阶乘公式

python如何得到1~20的奇数列表与偶数列表

输出1—200内的所有偶数用Python如何表达?

python输出1到100的偶数之和用函数

递归序列python