这是从网站上获取的程序的相关部分。
int N, cont[37];
void solve(int n, int sum) {
if (n == N/2) {
++cont[sum];
} else {
for (int i=0; i < 10; ++i) solve(n+1, sum+i);
}
}
int main() {
N = 4;
solve(0, 0);
.....
return 0;
}
此程序取自网络。递归函数运行良好,但在我看来它是一个无限递归。任何人都可以定义函数的过程吗?
答案 0 :(得分:3)
每次拨打solve
n
时,都有两种可能:
n == N/2
(在这种情况下为n == 2
)。没有递归调用,因此执行返回。
使用n+1
进行了10次通话。
只要初始n
低于N/2
,每个来电序列都会一直持续到n
到达N/2
。
答案 1 :(得分:2)
查看此函数的重构版本:
void solve(int n, int sum)
{
if (n == N/2)
++cont[sum]; //function exits without recursive call
else
{
for(int i = 0; i < 10; ++i)
solve(n+1,sum+1); //recursive call
}
}
因此递归在solve(N / 2,...)调用结束