c - 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
解决方案
这是我从你的问题中得到的:删除了全局变量,因为你只有 -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;
}
推荐阅读
- django - 在 Django 中构建可扩展模型关系有哪些启发式方法?
- c - 如何在 char 中编写单词列表?
- c# - 错误:26 - 在托管到 Web 服务器后定位服务器/实例时出错
- scala - Intellij Spark、Scala 读取 txt 文件并选择标头并将其用作数据框
- swift - 更改集合视图中的内容视图插入会使 UI 混乱
- c++ - 对象的 std::vector 应该使用指针、引用还是什么都不用?
- javascript - 自定义 webpack 解析器插件将 #meow 更改为 ./meow.js
- angular - 如何使用
没有中断变化检测? - firebase - 如何在 .then((){}); 之外获取此变量的值 颤抖的声明?
- c# - SetActive() 只能从主线程调用