使用递归将素数打印到N.

时间:2015-09-27 08:17:47

标签: python

L=[]

def Prime(N):
    a=0
    for i in range(2,N):
        if N%i==0:
            a+=1
        if a>0:
            return False
        else:
            return True

def PrimesList(N):
    if N==2:
        L.append(2)
    elif Prime(N):
        L.append(N)
        return PrimesList(N-1)
    else:
        return PrimesList(N-1)

L.reverse() 
print L 

如果我一次使用它,它会给出正确的答案。但L正在全球环境中得到拯救。使用递归时如何将其置于循环内?对大多数人来说这个问题可能是基本的,但我是Python的新手。我应该将素数打印到N.

2 个答案:

答案 0 :(得分:1)

我会将其作为第二个参数,使用int parseFile(int width, int height, char*fileName) { char*** matrix = malloc(width*height*sizeof(char*)); int counter = 0; int pointer = 0; FILE *file = fopen(fileName, "r"); const size_t line_size = 1024; char* line = (char*) malloc(line_size); while (fgets(line, line_size, file) != NULL) { char** data = malloc(width*sizeof(char*)); char *delim = ","; char *string = strtok(line, delim); while (string != NULL) { size_t ln = strlen(string) - 1; if (string[ln] == '\n') { string[ln] = '\0'; } data[counter] = string; string = strtok(NULL, delim); counter++; } matrix[pointer] = data; counter = 0; pointer++; } printf("%s", matrix[0][0]); return 0; 来避免this common issue

None

然后在递归调用中包含def PrimesList(N, L=None): if L is None: L = [] ... ,并确保在递归结束时L

答案 1 :(得分:0)

要打印第一个N素数,您只需打印第一个N-1素数并添加下一个素数。但是,为了计算下一个素数,数字列表也很有用,所以除了打印之外它只返回列表:

def printFirstPrimes(N):
    if N == 1:
        result = [2]
    else:
        result = printFirstPrimes(N-1)
        # ... compute next prime here ...
        result.append(next_prime)
    print result
    return result

请注意,这不是Python的最佳方法,深度递归效率不高,并且在参考实现CPython中没有实现尾调用优化。