递归计算特定位数

时间:2018-11-17 17:54:20

标签: c++ function recursion

我需要创建一个递归函数,该递归函数根据用户输入的数字来计算26

例如,如果用户输入26827,则计数为3

它可以使用某些数字,而不能使用某些数字。有人可以修改我的函数以确保其递归并使用我使用的非常基本的C ++语言。谢谢! (我相信返回类型有问题。)

int count(int n) {
    static int count = 0; 
    if (n == 2 || n == 6) count++;
    if ((n % 10 == 2) || (n % 10 == 6)) {
        count++; 
        count(num / 10);
    }
    else return count;  
}

4 个答案:

答案 0 :(得分:2)

一个衬里很有趣。

backup

答案 1 :(得分:1)

int count(int n) {
    if(n <= 0) return 0;  // Base Condition
    int countDig = 0;       // Initalizing Count of digits 
    if(n % 10 == 2 || n % 10 == 6)  // Checking whether the LSB is 2 or 6
        countDig ++; // If it is then incrementing the countDig
    countDig += count(n / 10);  // Calling the recurive function by sending the number except its LSB
                        //And incrementing counter according to it
    return countDig;    // Returning the final count
}

您不需要静态值计数器。如上可以很容易做到。请参考给出的评论。其次,代码中的错误是仅当LSB为2或6时才调用递归。应将递归放在代码的if条件之外。为什么要使用num变量。我认为应该是n

答案 2 :(得分:1)

如果要通过递归进行操作,则可以使用字符串操作应用另一个过程。

伪代码:

Function ( int n):
     1. Make n as a string. ( Convert Number to string)
     2. Collect the first character (char C) of the string and remove the character from the string.
     3. Make the main string again as a number n. ( Convert String to Number).
     4. Check the character C , which is number 2 or 6 or not, count it with a flag.
     5. Enter base case for which the recursion will stop.
     6. return the number n , inside the Function (n) for recursion.

答案 3 :(得分:0)

您不需要静态变量 这应该可以工作(请注意return c + count(n / 10)行。这是这里的主要递归)

int count(int n)
{
    int c = 0;
    if(n % 10 == 2 || n % 10 == 6)
        c = 1;
    if(n < 10)
        return c;
    return c + count(n / 10);
}