【问题标题】:Recursive function in C that returns the nth digit from the right of a given numberC中的递归函数,返回给定数字右边的第n个数字
【发布时间】:2019-05-27 15:38:16
【问题描述】:

函数int digit(int number,int position) 必须是递归的,并在“位置”从右边返回“数字”的数字。所以在我的代码中 number=5864 和 position=3 函数应该返回“8”。这是主要代码。

#include <stdio.h>

int digit(int number,int position);

 int main (){
int number=5864, position=3, result;
result=digit(number,position);
printf("result: %d\n",result );
system("pause");

return 0;
}

int digit(int number,int position){}

我知道这个问题已经被问过了,但我真的很难让它递归。 感谢您的关注。

【问题讨论】:

  • 到目前为止您尝试过什么?我们不会做你的功课
  • @MrTux 我已经尝试了比我想承认的要解决它更多的问题,但我不能把我的头脑围绕使它递归。现在我知道了解决方案,我意识到我是多么愚蠢。顺便说一句,这不是功课

标签: c recursion


【解决方案1】:

对于递归定义,您需要两件事 - 关于如何移动递归的规则,以及关于如何停止递归的规则。对于这个用例,您可以将这些规则形式化如下:

  • 如果position == 1,则返回最右边的数字
  • 如果position > 1,将number除以10并递减位置

或者,在 C 代码中:

int digit(int number, int position) {
    if (position == 1) {
        return number % 10;
    }
    return digit(number / 10, --position);
}

注意:此代码有点简单,不处理无效输入。非正数position 会将此代码发送到无限递归中。

【讨论】:

  • 什么是&lt;ve/&gt; ;-)?
  • 非常感谢!它是如此简单,但我无法理解它!
  • @CraigEstey 胖手指综合症,可能。感谢您的关注!
【解决方案2】:
int digit(int number,int position){
        if(position==1) return number%10;
      return digit(number/10,--position);
   }

【讨论】:

  • 谢谢!我不知道你为什么被否决,但它有效!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-27
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
  • 2021-02-08
  • 2015-12-04
  • 2015-06-05
相关资源
最近更新 更多