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

一个数字中所有数字的递归和

别锐
2023-03-14

我被困在这个练习中。

任务:

数字根是数字中所有数字的递归和。给定n,取n的位数之和。如果该值有多个位数,则以这种方式继续减少,直到生成一个位数。这只适用于自然数。

其工作原理如下:

数字根(16)
1 6=7

数字根(942)
9 4 2=15。。。1 5 =6

我的方法在这里。关于如何正确返回正确值的任何提示?我将不胜感激。

def digital_root(n):
    answ = 0
    s = 0
    x = str(n)

    for i in range(0, len(x)):
        s = s + int(x[i])
    if len(str(s)) > 1:
        digital_root(s)
    elif len(str(s)) == 1:
        answ = s # here is an answer
        return answ # answer is 2 but this one is not returning 2, why?

    return answ # here it returns answ=0, I want to return 2...

print(digital_root(493193))

共有3个答案

贝自怡
2023-03-14

这是我对它的看法。我很想使用sum,但这几乎像是作弊,因为你可以直接使用sum([int(I)代表str(n)])。

def digital_root(n):
    # convert to a string
    as_str = str(n)

    # get the value of the current first digit
    value = int(as_str[0])

    if len(as_str) > 1:
        # add the recursive return plus the value
        # for anything other than our base case.
        # pass the rest of the digits into our recursive call
        return digital_root(int(as_str[1:])) + value

    # our base case
    return value

print(digital_root(493193))
戎俊
2023-03-14

主要问题是,在进行递归调用时,您没有将返回值分配给任何东西,因此对于任何需要多次传递的值,您总是会得到0。

此外,递归调用后,长度应为1,因此不需要以下elif,因为它不会将s分配给answ,因此会导致错误的返回值

固定版本:

def digital_root(n):
    answ = 0
    s = 0
    x = str(n)
    for i in range(0, len(x)):
        s = s + int(x[i])
    if len(str(s)) > 1:
       s = digital_root(s)
    answ = s # You could even return s directly
    return answ

print(digital_root(493193))
阎俊英
2023-03-14

对此你怎么说:

def digital_root(n):
    if n<10 :
         return n
    return digital_root( n%10 + digital_root( n//10 ) )
 类似资料:
  • 我遇到的问题如下: 对于给定的不同十进制数字数组(0,1,2,3...,8,9)编写一个递归函数,返回由给定数字组成的所有自然数的总和。例如,对于数组{1,2},您将获得12 21 2 1 = 36 我想的是如果你有一个数组1,2,3 您可以将最后一个数字“放在一边”,并将剩下的较小的一组按如下方式排列: 1 2 3 2 1 3 2 3 1 3 3 这将是10*[perm(1,2)]3*(重复次数

  • 是否有一种方法可以编写递归函数,该函数打印数字中的位数,以便: -它是一个无效函数 -"if"条件是if(num==0),返回 -“else”将调用递归。 我看到了两种不同类型的代码,其中一种是“if”条件具有递归调用,另一种是用于“return”。但这不是我想要的。 我很不擅长递归,并试图通过自己编写代码来理解它,但没有成功。 这是我的代码(我明白为什么它打印122而不是3,但我真的不知道如何以

  • 我试图使用递归编写一个方法subsetWithSum(ArrayList numbers,int sum),该方法获取整数的ArrayList和整数的和,并返回一个ArrayList,其中包含给定数字(提供的ArrayList)中的数字,这些数字的和等于和。不必返回多个组合,如果没有这样的子集,则应返回null。但我的代码只为每个返回null`` 这是我的方法代码: 下面是我对该方法的主要调用:

  • 本文向大家介绍返回一个数组,该数组填充有JavaScript中数字的所有数字的位置值,包括了返回一个数组,该数组填充有JavaScript中数字的所有数字的位置值的使用技巧和注意事项,需要的朋友参考一下 我们需要编写一个函数,该函数需要一个正整数,并返回一个数组,该数组填充有该数字的所有数字的位置值。 例如- 让我们为该函数编写代码。 这个问题非常适合递归方法,因为我们将迭代数字的每个数字。因此,

  • 本文向大家介绍C#程序使用递归查找数字的数字总和,包括了C#程序使用递归查找数字的数字总和的使用技巧和注意事项,需要的朋友参考一下 假设我们已经设置了可以找到数字总和的数字- 以下将通过输入数字并递归检查来找到数字总和- 示例 以下是我们的代码,用于在C#中使用递归来查找数字的总和。 输出结果

  • 使用递归实现以下函数。不要使用任何局部变量或循环。 无效模式(无符号整数n) //前提条件:n //后置条件:输出由整数行组成。第一行 //是数字n。下一行是数字2n。下一行是 //数字4n,以此类推,直到你达到一个大于 //4242.这个数字列表会被重复直到你回来 //致。 /*n=840的输出示例: 840 1680年 3360 6720 6720 3360 1680年 840 */ //这是