我有以下代码:
#include <stdio.h>
#include <stdlib.h>
int func(int n0, int n);
int main ()
{
int n0, n, nFinal=0;
printf ("Enter constant (n0): ");
scanf ("%d", &n0);
printf ("Enter the number of iteractions (n): ");
scanf ("%d", &n);
nFinal = func(n0, n);
printf ("nFinal after %d iteractions is %d: \n", n, nFinal);
return 0;
}
int func(int n0, int n){
int i,nFinal=0;
for (i = 0; i < n; i++){
nFinal = (nFinal*nFinal) + n0;
}
return nFinal;
}
nFinal在for循环内计算。我想实现相同的结果,但要执行递归函数。
从我所看到的,我不能更改函数调用,因为我总是需要开始号和迭代次数。因此,在第一次迭代之后,程序将不得不再次调用
nFinal = func (n0, n);
,但是根据我在每次迭代nFinal的计算值时所需要的,我将不得不更改它。是否可以制作递归函数,但将该函数保持为
nFinal = func (n0, n);
?有人可以指点我吗?
最佳答案
看你的功能
int func(int n0, int n){
int i,nFinal=0;
for (i = 0; i < n; i++){
nFinal = (nFinal*nFinal) + n0;
}
return nFinal;
}
如果n为(小于)0,则结果为0。则nFinal的新值是nFinal ^ 2 + n0的旧值,因此得到:
int func(int n0, int n){
if (n <= 0) return 0;
int f = func(n0, n-1);
return f*f + n0;
}