[英]Can someone explain me why is that the output, C++ recursive function
[英]Please explain to me why this function is not recursive
我的导师坚持我不是在写递归函数,但没有解释为什么我的函数不是递归的。 我已经研究递归函数数周了,但显然仍然不明白什么是递归函数。 据我所知,递归函数是任何使用对原始函数的匹配函数调用来调用自身的函数。
伪示例:
bool foo(int someInt){
++someInt;
return foo(someInt);
}
下面是我最新的功能。
int LinkedList::sumR(int intIn){
if(intIn == 0){
if(head != NULL)
curr = head;
}
if (head != NULL){
if(curr->next != NULL){
intIn = intIn + curr->data;
curr = curr->next;
return sumR(intIn);
}
else
{
intIn = intIn + curr->data;
}
return intIn;
}
return intIn;
}
在这一点上,我完全迷失了。
在给我的导师发电子邮件后,他们回答说,一个函数要递归,它必须接受一个类或结构指针作为参数(就他们而言,我猜)。
没有数学定义很难说,但我认为您的讲师期望您将其实现为纯函数,而不依赖于函数外部的任何状态(例如名为cur
的变量)。
例如采用阶乘函数(5!= 5 x 4 x 3 x 2 x 1)
int fact(n) = { 1 if n == 1 else n * fact(n-1) }
如果我按照您在上面实施清单总和的方式实施此操作
prod = 1
fact(n) {
if (n > 1) {
prod *= n;
fact(n - 1);
}
}
第二个实现依赖于副作用(全局状态变量prod
)。
如果您的LinkedList
是节点列表LinkedList::Node
(您的变量cur
和head
指向的内容),则尝试将您的函数重新定义为:
int LinkedList::sumR(LinkedList::node cur);
并用sumR(list->head);
调用它sumR(list->head);
任何递归方法都将包括以下三个基本元素:
您的第一个示例丢失 #2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.