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

代码战争 带递归的持久性方法?

容寒
2023-03-14

我完成了关于Codewars的Kata,这是乘法持久性方法。对于那些没有意识到挑战的人,情况如下:

该函数接受一个正参数 num 并返回其乘法持久性,即您必须以 num 为单位乘以数字直到达到一位数的次数。例如:

 persistence(39) === 3 // because 3*9 = 27, 2*7 = 14, 1*4=4
                   // and 4 has only one digit

 persistence(999) === 4 // because 9*9*9 = 729, 7*2*9 = 126,
                    // 1*2*6 = 12, and finally 1*2 = 2

 persistence(4) === 0 // because 4 is already a one-digit number

我的解决方案使用了两个while循环(下图)。我现在正在尝试使用递归编写方法。然而,我发现我可能会遇到线程问题(因为我需要返回乘以数字的次数)。是否可以使用递归?如果是,怎么办?

这是我使用迭代的代码:

public static int persistence(long n) {
    int count = 0;
    if(n < 10) return count;
    long num = 1;

    while(n >= 10) {
      while(n != 0) {
        num*=(n % 10);
        n/=10;
      } 
      n = num;
      num = 1;
      count++;
    }
    return count;
}

到目前为止,我只知道:

  1. The base case would be
      if(n < 10) return 0;
    

    递归案例是我卡住的。谢谢!

共有1个答案

卫骏
2023-03-14

使用递归可以很容易地消除外部循环:

public static int persistence(long n) {
    if(n < 10) return 0;
    long num = 1;
    while(n != 0) {
        num*=(n % 10);
        n/=10;
    } 
    if (num > 10) {
        return 1 + persistence (num);
    } else {
        return 1;
    }
}

或者更简单:

public static int persistence(long n) {
    if(n < 10) return 0;
    long num = 1;
    while(n != 0) {
        num*=(n % 10);
        n/=10;
    }
    return 1 + persistence (num);
}
 类似资料:
  • 我对这个代码有一些问题 问题1:终止情况究竟如何运作?s.length如何等于0? 问题2:为什么代码需要具有“firstChar”才能反转字符串?为什么当逆转字符串接受0的子字符串而不必添加第一个字符时,代码不起作用?

  • 所以,我试图想出一种方法来对凯撒密码进行加密/解密(在这里,你输入一个值,然后将字母沿着字母表移动很多次,例如,如果密钥是3,那么a将变成d,b将变成e,c将变成f,以此类推),但我需要使用递归,而不是迭代。到目前为止,我只对最后一个字符进行了加密,并输出“encrypted-w”,这对我来说是没有意义的。

  • 我熟悉此处定义的Akka测试方法: http://doc.akka.io/docs/akka/snapshot/scala/testing.html 我了解如何使用TestKit、TestActorRef、TestProbe等。我还了解我的核心域逻辑应该与Akka隔离提取和测试。 我的问题是关于在Akka Persistence参与者(即PersistentActor和PersistentView

  • 我尝试使用Spring Boot 2.0.2从战争转移到罐子,并且在使用故障安全进行maven测试时遇到了问题。 我看到两种错误: > < li> < code > Java . lang . noclassdeffounderror ,其中列出了我的一个bean类 当我在 IntelliJ 中运行这些测试时,一切正常,但它们在 maven 中失败。与此同时,当我回到建立战争而不是罐子时,一切都有

  • EJB 3.0,EJB 2.0中使用的实体bean在很大程度上被持久性机制所取代。 现在,实体bean是一个简单的POJO,它具有与表的映射。 以下是持久性API中的关键角色 - Entity - 表示数据存储记录的持久对象。 可序列化是件好事。 EntityManager - 持久性接口,用于对持久对象(实体)执行添加/删除/更新/查找等数据操作。 它还有助于使用Query接口执行查询。 Per

  • 我在scheme中构建了一个递归函数,它将在一些输入上重复给定的函数f,n次。 我需要用尾递归构建这个函数的迭代版本,如果我正确理解尾递归,我认为我做得对。 我的问题是,这真的是迭代的吗?我相信我已经使用尾部递归正确地构建了它,但从技术上讲,它仍然将一系列操作推迟到count=0,在这里,它执行叠加的任意多个组合。