我有以下代码:

#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;
}

09-16 10:11