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.
答案 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中没有实现尾调用优化。