def multAll(k, A):
return multAllRec(k,A,0)
def multAllRec(k,A,i):
if i == A[len(A)-1]:
return
if i < len(A):
A[i] = A[i]*k
return A[i]
return multAllRec(k, A, i+1)
multAll(10,[5,12,31,7,25])
我正在使用python创建一个递归函数,该函数将数组中的元素乘以变量k。在这段代码中,我正在执行递归函数,但是它只在应该返回50
时才返回[50,120,310,70,250]
。它只是乘以数组的第一个元素。
我在做什么错了?
答案 0 :(得分:1)
该函数应该返回一个列表,其中仅将列表的第一项乘以,同时将其余项传递给递归调用:
def multAll(k, A):
return A and [k * A[0], *multAll(k, A[1:])]
这样:
multAll(10, [5, 12, 31, 7, 25]
返回:
[50, 120, 310, 70, 250]
答案 1 :(得分:1)
在您的代码中,您必须更改2行,完整返回A,并且在更新值时不返回A [i]
编辑:仅使用#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include<fstream>
#include<string>
#include <stack>
using namespace std;
class cell
{
private:
bool visited;
bool up, down, right, left;
int x, y;
int px, py;
char status;
public:
cell() {
up = down = right = left = 0;
x = y = 0;
status = ' ';
}
bool getUp() { return up; }
bool getDown() { return down; }
bool getRight() { return right; }
bool getLeft() { return left; }
bool getvisited() { return visited; }
void setUp(bool b) { up = b; }
void setDown(bool b) { down = b; }
void setRight(bool b) { right = b; }
void setLeft(bool b) { left = b; }
void setvisited(bool b=0) { visited = b; }
void setstatus(char s = ' ') { status = s; }
char getStatus() { return status; }
};
class Maze
{
private:
int row, col;
cell **arr;
public:
Maze(int r = 0, int c = 0)
{
this->row = r; this->col = c;
arr = new cell*[row];
for (int i = 0; i < row; i++)
arr[i] = new cell[col];
}
};
int main()
{
Maze m(5, 5);
m.arr[1][1].setLeft(true);
}
len(A)
答案 2 :(得分:0)
为什么在这里使用递归?似乎需要的工作量过多。只需使用for循环或理解即可。
foreach