我需要创建一个递归函数,该递归函数根据用户输入的数字来计算2
和6
。
例如,如果用户输入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;
}
答案 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);
}