C 递归函数

标签 c function recursion

我有这个代码:

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

关于C 递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10161073/

相关文章:

python - 下标值不是数组、指针或 vector ,当我尝试执行此内核代码时收到此错误消息

c++ - Boost.Fiber 是否会在网络请求时自动让步,例如通过网络调用数据库?

java - 将数组作为指针+大小或范围传递给包装函数

php - 仅当从特定子目录调用时才执行 PHP 函数

algorithm - 检查两个二叉搜索树是否具有相同的键

c++ - 递归的权力

c - 仅在 while 循环结束时打印文本

jquery - 使用函数内的变量设置新变量

c++ - 类循环

javascript递归计数器