尝试使用递归返回值,但未显示值

时间:2019-10-21 17:44:03

标签: python recursion

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]。它只是乘以数组的第一个元素。

我在做什么错了?

3 个答案:

答案 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