首页 > 解决方案 > C 中的递归:我认为问题在于 fFunc 中的第二个问题

问题描述

所以我过去两天一直在尝试调试我的代码,但我找不到我的逻辑失败的地方(显然是失败了。)这是我第一次使用递归。所以我的 fFunc 应该如下: 给定一个正整数 n,让 Fn(i) 定义如下:

如果 i < n 则:Fn(i) = i

如果 i ≥ n 则: Fn(i) = Σn/j=1 (−1)j+1*j*Fn(i - j)

i 和 n 在开始时被扫描。下面是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int sum = 0, j=0;

int power(int num, int exponent) {

    int powers=1;

    while (exponent>0) {
        powers=powers*num;
        exponent--;
    }
    return powers;
}

int fFunc(int i, int n) {

    if(i<n){
            sum =+ i;
    }
    if(i>=n){
        for(int j=1; j<=n; j++){

            sum +=(power(-1,j+1))*j*fFunc(i-j, n);
        } 
        return sum;
    }
    return sum;
}

int main(int argc, char *argv[]) {

    int n, i;
    scanf("%d %d", &n, &i);

    printf("%d\n", fFunc(i, n));
    return 0;
 }

以下是一些示例输入和输出。关于我哪里出错的任何想法?我感谢任何指示、想法甚至批评。我只是想从我的错误中吸取教训 :) 示例 1:输入:3 5 输出:5 示例 2:输入:4 6 输出:-5 示例 3:输入:8 6 输出:6

标签: crecursion

解决方案


这是我从你的问题中得到的:删除了全局变量,因为你只有 -1 的幂,我优化了代码:

#include <stdio.h>
#include <stdlib.h>

int my_power(int exponent) {

    if(exponent % 2 == 0)
        return 1;
    else
        return -1;
}

int fFunc(int i, int n) {

    if(i < n){
        return i;
    }
    else{
        int sum = 0;
        for(int j = 1; j <= n; j++){
            sum += my_power(j + 1) * j * fFunc(i-j, n);
        }

        return sum;
    }
}

int main()
{
    int n, i;
    printf("Input n: ");
    scanf("%d", &n);

    printf("Input i: ");
    scanf("%d", &i);

    printf("%d\n", fFunc(i, n));
    return 0;
}

推荐阅读