我正在为我的大学做作业。我需要创建递归函数。
我的list_t
界面包含以下功能:
List Interface
The file recursive.h defines the type "list_t" and the following operations on lists:
// EFFECTS: returns true if list is empty, false otherwise
bool list_isEmpty (const list_t& list);
// EFFECTS: returns an empty list.
list_t list_make ();
// EFFECTS: given the list (list) make a new list consisting of
// the new element followed by the elements of the
// original list.
list_t list_make (int elt, const list_t& list);
// REQUIRES: list is not empty
// EFFECTS: returns the first element of list
int list_first (const list_t& list);
// REQUIRES: list is not empty
// EFFECTS: returns the list containing all but the first element of list
list_t list_rest (const list_t& list);
// MODIFIES: cout
// EFFECTS: prints list to cout.
void list_print (const list_t& list);
请注意sum函数需要是尾递归的,我不能使用静态或全局变量。
直到现在我才接受这个,这给了我错误的答案:int sum(list_t list) {
if(list.get_rest_list().is_empty())
return list.get_first_elt() + sum(list.get_rest_list());
}
答案 0 :(得分:0)
让我们用适当的缩进重写该函数:
int sum(list_t list)
{
if(list.get_rest_list().is_empty())
return list.get_first_elt() + sum(list.get_rest_list());
// what to return here?
}
除了有缺陷的逻辑之外,您还没有return
语句覆盖所有控制路径,如果条件不满足,将导致返回不确定的值。
(不是这样)更正后的代码:
int sum(list_t list)
{
if(list.get_rest_list().is_empty())
return list.get_first_elt();
return list.get_first_elt() + sum(list.get_rest_list());
}
如果愿意,可以使用三元运算符重写它。
但是如果你传递一个空list_t
怎么办?更好地做到这一点:
int sum(list_t list)
{
if(list.is_empty())
return 0;
return list.get_first_elt() + sum(list.get_rest_list());
}