【问题标题】:Recursion function to determine whether a series is going upward or downward递归函数来确定一个系列是向上还是向下
【发布时间】:2020-12-21 21:15:23
【问题描述】:

我需要编写一个函数来打印 0 或 1

  1. f 变量需要为 0 或 1
  2. 当用户输入一个数字时,例如4321 并且f 变量为0,该函数应返回1,因为该数字是从右到左的升序序列,否则返回0
  3. 当用户输入数字时,例如 1234f 变量为 1,函数应返回 1,因为数字从左到右递增,否则返回 0

这是我的代码尝试:

#include <stdio.h>
int f2(int num, int f)
{
    int x = num % 10, y = num % 100 / 10;
    //if (x == y) return 0;
    if (f == 0) {
        if (x > y) return 0;
         else {
            f2(num / 10, f);
            return 1;
        }
    }
    if (f == 1) {
        if (x < y) return 0;
        else {
            f2(num/10, f);
            return 1;
        }
    }


}

void main()
{
    int num, f;
    printf("please enter number and f:");
    scanf_s("%d %d", &num, &f);
    printf("The result of calling f2(%d) is: %d",num, f2(num, f));
}

问题是当我将 f=1 与数字 1234 放在一起时,输出为空白

【问题讨论】:

  • 只是想为我的英语说借口,这不是我的母语
  • 你没有使用递归调用的返回值。
  • @Barmar 你是什么意思?你能详细说明一下吗?
  • f2(num / 10, f);f2(num/10, f);。那就是那里。函数被调用,它们返回一个值,返回值没有被使用。
  • 请考虑阅读此Q&A 以了解main 的返回值。

标签: c recursion


【解决方案1】:

有两个问题。

  1. 您没有停止递归的基本情况。当num 为单个数字时,递归应该停止,因为这总是按顺序排列的。
  2. 您没有检查递归的结果。调用f2(num/10, f) 后,您总是返回1,即使递归调用返回0。你应该这样做return f2(num/10, f)
int f2(int num, int f)
{
    if (num < 10) { // base case
        return 1;
    }
    int x = num % 10, y = num % 100 / 10;
    if (f == 0) {
        if (x > y) {
            return 0;
        }
         else {
            return f2(num / 10, f);
         }
    }
    if (f == 1) {
        if (x < y) {
            return 0;
        }
        else {
            return f2(num/10, f);
        }
    }
}

【讨论】:

  • 我按照你说的做了,它返回一个大于 0 或 1 的值,我只想在我输入 num=1234 和 f=1 时输出返回 1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-18
  • 2015-01-22
  • 2011-12-28
  • 1970-01-01
  • 2011-06-28
  • 1970-01-01
  • 2014-07-11
相关资源
最近更新 更多