【问题标题】:Write a recursive function in C that prints all odd numbers(backwards) and when it reaches 1 it stops在 C 中编写一个递归函数,打印所有奇数(向后),当它达到 1 时停止
【发布时间】:2020-04-08 08:45:57
【问题描述】:

我是第一次来这里发帖。就像标题说的我需要通过递归函数打印所有奇数。问题是我创建了一个简单的程序来执行此操作,但是当它达到 1(应该是程序停止的点)时,程序崩溃了,老实说,我看不出问题出在哪里。我的教授说我忘记在某个地方放一个回报,但老实说我不知道​​在哪里。因此,如果有人能指出问题,那就太好了(ps。我使用 Code::Blocks 作为我的 IDE)。

int main() {
  int a, b;
  printf("Unesi neki broj:    \n");
  scanf("%d", &a);
  b = koko(a);
  printf(b);
}

int koko(int a) {
  if (a == 1) {
    return a;
  }
  if (a % 2 != 0) {
    printf("Ovaj broj je neparan:  %d  \n", a);
  }
  koko(a - 1);
}

【问题讨论】:

  • 阅读编译器警告。他们会告诉你出了什么问题。提示:主函数的最后一行。
  • 也用-Wall -Wextra 编译。他们会告诉你递归出了什么问题。
  • koko 应该返回什么,例如值 a = 15?它应该总是返回 1 吗?
  • 另外,由于您是 SO 新手,您可能需要阅读 How to Ask 并选择 tour

标签: c


【解决方案1】:

首先,你必须声明函数koko;在main 函数中使用它。

int koko(int a);

其次,printf(b)需要定义打印出来的类型:

printf("%d\n", b);

最后,使用return koko(a - 1); 而不是koko(a-1),因为这个函数必须返回一个int 值。

那么,完整的代码:

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

int koko(int a);

int main() {
  int a, b;
  printf("Unesi neki broj:    \n");
  scanf("%d", &a);
  b = koko(a);
  printf("%d\n", b);
  return 0;
}

int koko(int a) {
  if (a == 1) {
    return a;
  }
  if (a % 2 != 0) {
    printf("Ovaj broj je neparan:  %d  \n", a);
  }
  return koko(a - 1);
}

【讨论】:

  • 如果对你有用,请采纳为最佳答案。
【解决方案2】:

enter image description here

int koko(int a) 
{
    if (a % 2 != 0) 
    {
        printf("Ovaj broj je neparan:  %d  \n", a);
    }

    if (a == 1) {
        return a;
    }

    koko(a - 1);
}

int main() 
{
    int a, b;

    printf("Unesi neki broj:    \n");
    scanf("%d", &a);

    b = koko(a);

    printf(" koko(a) return %d", b);

    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-09
    • 2017-10-08
    • 2020-10-24
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    相关资源
    最近更新 更多