有人可以向我解释这种递归是如何工作的吗?
如果递归只留在a == b
并且它a = 6
和b = 6
int main()
{
printf("%d \n",mistero(2, 6));
return 0;
}
mistero( a, b)
{
if( a == b ){
return a;
}
return a + mistero(a+1, b);
}
答案 0 :(得分:7)
mistero(2, 6) =
2 + mistero(3, 6) =
2 + 3 + mistero(4, 6) =
2 + 3 + 4 + mistero(5, 6) =
2 + 3 + 4 + 5 + mistero(6, 6) =
2 + 3 + 4 + 5 + 6
= 20
答案 1 :(得分:4)
递归的工作原理如下:
2 + mistero(3,6);
2 + 3 + mistero(4,6)
2 + 3 + 4 + mistero(5,6)
2 + 3 + 4 + 5 + mistero(6,6)
2 + 3 + 4 + 5 + 6 = 20
答案 2 :(得分:3)
只需逐步执行代码,并用返回值替换函数调用。
首次调用该函数时:
return 2 + mistero(3,6);
mistero(3,6)
返回3 + mistero(4,6)
所以return语句最终会继续添加到a==b
return 2+3+4+5+6
答案 3 :(得分:2)
首先你的函数定义必须在你的main之前,所以在编译时它在main函数中是已知的,否则你必须使用函数原型!
您也忘了定义返回类型和参数类型。所以你的代码应该看起来像这样:
#include <stdio.h>
int mistero(int a, int b) {
//^ ^^^----^^^ variable type
//| Here return type
if( a == b ) {
return a;
}
return a + mistero(a+1, b);
}
int main() {
printf("%d \n",mistero(2, 6));
return 0;
}
或者使用函数原型:
#include <stdio.h>
int mistero(int a,int b);
int main() {
printf("%d \n",mistero(2, 6));
return 0;
}
int mistero(int a,int b) {
if( a == b ){
return a;
}
return a + mistero(a+1, b);
}
这应该表明它是如何运作的:
return 2 + mistero(2 + 1, b);
return 2 + 3 + mistero(3 + 1, b);
return 2 + 3 + 4 + mistero(4 + 1, b);
return 2 + 3 + 4 + 5 + mistero(5 + 1, b);
return 2 + 3 + 4 + 5 + 6;
= 20
答案 4 :(得分:0)
我猜这个令人困惑的方面是明显缺乏某种循环语句。 I.e for
或do while
声明。
在程序的最后以这种方式考虑它。
return A + MISTERO(A+1, B) /* IS THE LOOP STATEMENT */
它使程序从函数MISTERO (A , B)
中调用函数MISTERO (A, B)
。因此,只要发生这种情况,您就可以获得一个循环方式。在语句test if(A == B)
中满足循环之前。然后循环转义是一个简单的return A
。
谢谢享受编程!!!