我尝试编程递归地将第n个数字的前三个数字相加,直到得到第n个值
例如:
func(n) ={如果n= 1,则返回a;如果n=2,则返回b;如果n=3,则返回c;如果n>3,则返回func(n - 1) + func( n- 2) + func( n- 3) }}
int find_nth_term(int n , int a ,int b,int c)
{
if (n == 2)
{
return b;
}
else if (n == 1)
{
return a;
}
else if (n == 3)
{
return c;
}
else if (n > 3)
{
int temp = a + b +c;
a= b;
b = c;
c = temp;
return find_nth_term(n-1, a ,b,c);
}
}
int main() {
int n, a, b, c;
scanf("%d %d %d %d", &n, &a, &b, &c);
int ans = find_nth_term(n, a, b, c);
printf("%d", ans);
return 0;发布于 2021-08-14 14:19:42
如果n上的任何条件都不成立,例如当n为负值时,函数的执行将到达最后的大括号,而不会返回任何值。
这里最重要的观察是,没有必要将else与return结合使用。函数要么返回,要么继续。一个包含一些随机数的示例:
int some_function(int n)
{
if (n == 1)
return 5;
if (n > 3)
return 11;
if (n < 100)
return 41;
return -1;
}发布于 2021-08-14 15:01:17
函数必须返回int
看看你的代码,把重点放在if,else-if块上。如果n是1,2,3或更大并且return某物,则这些块匹配。但是,如果n为0或小于0怎么办?它返回什么?如果数据块缓存了它,那会是什么呢?这就是编译器抱怨的原因。在所有情况下,函数都必须返回某些内容。
因此,您必须在最后一个函数块之后添加一个else块,或者可以在函数块的底部添加一个return表达式。比如return -1;
else if (n > 3)
{
int temp = a + b +c;
a= b;
b = c;
c = temp;
return find_nth_term(n-1, a ,b,c);
} else {
return -1;
}https://stackoverflow.com/questions/68784084
复制相似问题