【问题标题】:Recursive Function equation递归函数方程
【发布时间】:2018-11-28 12:51:56
【问题描述】:

预警,这是家庭作业。 我应该创建一个递归函数,但我做错了。当我输入 4 时,我应该从 f(x) 得到 16 的结果,但我得到 -2。我真的不明白我哪里错了。另外我不知道我是否应该在 main 或 f 中打印我的结果。

编写一个程序,向用户查询整数值并使用递归

返回以下递归定义值的函数:

f(x) =x+3 if x <=0

f(x)=f(x-3)+(x+5) otherwise

我的尝试:

#include <stdio.h>
int f(int x); //Prototype to call to f

int main(void) {
  int n; //number the user will input

//Ask user to input data an reads it
  printf("Enter a whole number: ");
  scanf("%d", &n);

//Pointer for f
  f(n);

//Prints results
  printf("\nn is %d\n", n);
  printf("f(x) is %d\n", f(n));
  return 0;
}

int f(int x) {
//Checks if equal to zero
  if (x <= 0) {
     x + 3;
  }
//If not equal to zero then do this
  else {
     f(x - 3) + (x + 5);
  }
}

感谢大家的帮助,从你们的cmets和建议中学到了很多。 我相信我能够让它工作https://pastebin.com/v9cZHvy0

【问题讨论】:

  • 每个递归函数都有 (1) 退出条件和 (2) 递归调用。您没有提供退出条件。此外,您需要scanf("%d", &amp;n)(注意'&amp;')并且您必须验证return,例如if (scanf("%d", &amp;n) != 1) { /* handle error */ }。您对f(n); 的调用不是// Pointer for f,它只是一个函数调用(在那里没有什么意义)。想想你的递归调用集必须如何退出。由于 (x-3)+(x+5) 的计算量会增加,所以 x &lt;= 0 不能成为退出条件。
  • @DavidC.Rankin:退出条件为x &lt;= 0。看来你可能错过了f(x-3) 调用f(x+5) 没有。
  • 是的,我读的是f (x-3 + x + 5)

标签: c recursion


【解决方案1】:

据我所知,第一个是scanf

scanf("%d", &n);

第二个是你的函数f没有返回任何东西,所以这个

int f(int x) {
//Checks if equal to zero
  if (x <= 0)
  {
     return (x + 3);
  }

  return ( f(x-3) + (x+5) );
}

minor - 下面的语句实际上没用

//Pointer for f
  f(n);

【讨论】:

  • 额外的return ( ... ) 括号是多余的,但对函数设置的调用很好。
【解决方案2】:

作为一个生活的学生,我总是愿意帮助一个学术同行:

您的代码有一些需要注意的错误:

  1. int f(int x) 没有 return 语句,即使它需要一个整数。我假设您希望返回程序的结果(参见问题 #3)。

  2. 你执行了两次 f(n)。首先在第 12 行,然后在第 16 行。printf("f(x) is %d\n", f(n)); 实际上执行 F(n) 以接收其返回值以与 %d 格式说明符关联。

  3. 您尚未将 x+3f(x-3) + (x+5) 分配给任何整数。这些语句不会保存您需要返回的 f(x) 的返回值。

此链接可能对您有所帮助:

https://www.geeksforgeeks.org/c-function-argument-return-values/

请特别注意如何捕获函数的输出。

希望这会有所帮助(祝你学业成功!)

【讨论】:

  • 另外,scanf 语句缺少&amp;
猜你喜欢
  • 1970-01-01
  • 2013-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-07
  • 2015-03-01
相关资源
最近更新 更多