是否有一种方法可以编写递归函数,该函数打印数字中的位数,以便:
-它是一个无效函数
-"if"条件是if(num==0),返回
-“else”将调用递归。
我看到了两种不同类型的代码,其中一种是“if”条件具有递归调用,另一种是用于“return”。但这不是我想要的。
我很不擅长递归,并试图通过自己编写代码来理解它,但没有成功。
这是我的代码(我明白为什么它打印122而不是3,但我真的不知道如何以不同的方式编码。帮助任何人?)
#include <iostream>
#include <string.h>
using namespace std;
void numOfDigits(unsigned int num);
int main(){
int num = 994;
numOfDigits(num);
}
void numOfDigits(unsigned int num)
{
int size = 1;
if (num==0)
return;
else
{
if (num / 10 != 0)
size++;
numOfDigits(num / 10);
}
cout << size;
}
您可以通过引用传递一个值并使用它,每次调用此函数时初始化ans=0
void recursive(unsigned int num,int &ans){
if(num == 0){
return;
}
else{
ans++;
recursive(num/10,ans);
}
}
看这个还有这个
您在numOfDigits()函数中有许多错误。
> < li >首先,每次调用函数时,都要声明一个名为size的新局部变量。这与调用函数中定义的“大小”无关。要看到这一点,请在初始化后打印size。若要解决此问题,请将大小设为静态;然后,每次您调用该函数时,它都会使用相同的静态变量。 < li>
当您在函数末尾打印尺寸时,它只是在函数运行后给出尺寸变量的值。即使将size设置为static,也将打印size的中间值。解决这个问题的一个简单方法是允许函数返回size,您只需在main函数中打印该函数的值。
#include <iostream>
#include <string.h>
using namespace std;
int numOfDigits(unsigned int num);
int main(){
int num = 994;
cout<<numOfDigits(num);
}
int numOfDigits(unsigned int num)
{
static int size = 1;
if (num==0)
return 0;
else
{
if (num / 10 != 0)
size++;
numOfDigits(num / 10);
}
return size ;
}
请确保按您的需要使用(num==0);在这种情况下,它打印0作为答案。
PS:打印数字后总要加个空格。否则你可能会认为1 2 2(实际上是打印出来的数字)是122。
让这段代码工作的一个快速技巧是将< code>size设为静态,也就是更改
int size = 1;
自
static int size = 1;
但这只在你第一次调用这个函数时有效。
要获得更稳健的解决方案,在每次调用函数时,必须传递到目前为止的计数:
void numOfDigits(unsigned int num, int countSoFar = 0) {
if (num == 0)
std::cout << countSoFar << '\n';
else
numOfDigits(num / 10, countSoFar + 1);
}
我知道这个问题已经被问过很多次了,但是我的问题有点不同。这个任务要求我不验证一个字符串是否是回文——而是验证一个字符串中有多少回文(返回为“int”)。这应该使用迭代函数来完成 以下是我的迭代函数代码供参考: 我只是很难把它转换成递归函数。感谢所有帮助!
定义一个接受1个参数的count_down函数。当你调用count_down(3)时,输出应该是这样的:3...2...1...0!。 我的代码如下: 但是输出是[3,2,1,0][4,3,2,1,0]如何获得如所讨论的格式所描述的格式:3...2...1...0!
问题 你想在一个函数中调用相同的函数。 解决方案 使用一个命名函数: ping = -> console.log "Pinged" setTimeout ping, 1000 若为未命名函数,则使用 @arguments.callee@: delay = 1000 setTimeout((-> console.log "Pinged" setTimeout arg
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。 举个例子,我们来计算阶乘n! = 1 x 2 x 3 x ... x n,用函数fact(n)表示,可以看出: fact(n) = n! = 1 x 2 x 3 x ... x (n-1) x n = (n-1)! x n = fact(n-1) x n 所以,fact(n)可以表示为n x fact(n-1),
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。 举个例子,我们来计算阶乘n! = 1 x 2 x 3 x ... x n,用函数fact(n)表示,可以看出: fact(n)=n!=1\times2\times3\times\cdot\cdot\cdot\times(n-1)\times n=(n-1)!\times n=fact(n-1)\times n
我有一个家庭作业问题,它给出了一个递归函数,我必须使用尾部递归来实现它。函数为f(0)=1 f(n)=1 2*f(n-1) 我并不擅长尾部递归,我试着查找示例,但我发现的都是没有斐波那契序列的示例,这没有多大帮助。 我真正拥有的是 我知道尾递归基本上每次调用都计算函数,我只是不知道如何实现它。 编辑:我打了一个错字f(n)应该是1 2*f(n-1)