当前位置: 首页 > 知识库问答 >
问题:

递归法求一个数中出现的次数

段干博明
2023-03-14
public static boolean countExactly(int num, int digit, int count) {
    if(digit <= 9) {
        return false;
    }
    if(num % 10 == digit) {
        countExactly(num % 10 + num / 10, digit, count++);
    }
    return true;
}

我的代码怎么了???我正试图写一个递归方法来求一个数中出现的数。编写一个递归函数,对一个正整数num进行编码,从另一个整数中提取一个数字,不进行负计数。如果数字显示的次数正好是数字,则函数返回true,否则返回false。

示例:输入:122231位:2计数:3输出:真

共有2个答案

魏煜祺
2023-03-14

你可以试试这个

public static boolean countExactly(int num, int digit, int count) {
    if (num <= 9 ) {
        return (digit==num && count==1) || (digit!=num && count==0) ;
    }
    if (num % 10 == digit) {
        count--;
    }
    return countExactly( num / 10, digit, count);
}

尝试输入值

  • 2,2,1
  • 122231,2,3
  • 12231,2,2
  • 1,2,0
仇经武
2023-03-14

以下是您的方法存在的问题:

  1. 您在递归调用中传递Count,递归调用将始终作为Count传递,然后值将递增,即递增的值将永远不会被使用。根据您的逻辑,它应该是Count--Count
  2. 您正在调用Count精确(num%10 num/10, digit, count),这就像调用一个无效函数/方法。它在语法上是正确的,但在您的程序中没有任何用途?

你应该这样做:

public class Main {
    public static void main(String[] args) {
        // Tests
        System.out.println(countExactly(122231, 2, 3));
        System.out.println(countExactly(122231, 2, 2));
        System.out.println(countExactly(122231, 2, 4));
        System.out.println(countExactly(1222231, 2, 4));
        System.out.println(countExactly(2222231, 2, 4));
        System.out.println(countExactly(2222231, 2, 5));
        System.out.println(countExactly(2222231, 2, 3));
    }

    static boolean countExactly(int num, int digit, int count) {
        if ((num == digit && count == 1) || (num != digit && num <= 9 && count == 0)) {
            return true;
        }
        if (num <= 9) {
            return false;
        }
        if (num % 10 == digit) {
            return countExactly(num / 10, digit, --count);
        } else {
            return countExactly(num / 10, digit, count);
        }
    }
}

输出:

true
false
false
true
false
true
false
 类似资料:
  • 我有一个任务,它获取一个int值“n”和一个Int Array作为参数,并且应该返回一个布尔值。该方法应该确定给定数组中有多少个“n”。如果数字是偶数,则方法应该返回true,否则返回false。如果数组的长度为0,它也应该返回“false”。 我设法做到的是: 老实说,我真的很困惑,我不知道该怎么办。我真的已经尽力了,但是我在这项任务上工作的时间越长,我就越不理解。感谢任何帮助,并提前感谢您!:

  • 我正在编写一个递归函数,它以一个整数作为输入,它将返回123出现在整数中的次数。 例如: 打印(onetwothree(123123999123)) 将打印出3,因为序列123在我输入函数的数字中出现了3次。 以下是我到目前为止的代码: 这将继续打印“0”。

  • 该函数获取一个整数和一个数字,如果该数字在整数中出现偶数次,则返回true,否则返回false。 例如: 如果 和 ,则该函数应返回 。 如果 和 ,则该函数应返回 。 这是我到目前为止得到的,我被卡住了……这是家庭作业,所以请不要写答案,而是提示我并帮助我自己完成。

  • 问题内容: 我有一个我要为类创建的程序,该程序使用递归返回数组中所有整数的总和。到目前为止,这是我的程序: 但是,我相信我得到了三个都相关的错误,但是我不知道为什么它会找到一种null类型: 问题答案: 该解决方案比看起来简单,请尝试以下操作(假设数组的长度为非零): 这样称呼它:

  • 我正在尝试解决leetcode上的以下问题:硬币兑换2 输入:金额=5,硬币=[1,2,5]输出:4说明:有四种方法来弥补金额: 5=5 5=2 2 1 5=2 1 1 1 5=1 1 1 1 1 我试图实现一个迭代的解决方案,本质上模拟/模仿递归使用堆栈。我已经设法实现了它,解决方案有效,但它超过了时间限制。 我注意到递归解决方案利用记忆进行优化。我也想在我的迭代解决方案中包含这一点,但我不知道

  • 假设数组A:1,2,3,1,1,3。不同的整数应在数组B中:1,2,3。然后,函数应打印:[1,1][1,2][1,3][2,1][2,2][2,3][3,1][3,2][3,3]。 我试图解决不重复的整数问题,但没有递归 但问题是我必须以递归的方式解决它,有什么想法吗?