我无法弄清楚如何使用递归加倍数字,问题是函数必须灵活,必须能够调用一个数字加倍然后再次加倍结果并继续直到它停止。例如,每次你戳它时,一个粘液分成2个,我需要以某种方式使用递归来表示这个(1-> 2-> 4->> 8-> 16)然而我已经碰到了一块墙,因为我和#39;我很难理解递归。
我从
开始int doublesomething(int N, int X){
return N * X;
}
然后把它放到另一个函数中,但是如果没有函数循环并重置数字,我会弄清楚如何加倍它,我会链接我在这里的代码,但老实说这只是胡言乱语,因为我'有点迷失在递归的兔子洞里
int doublethis(int times){
if (times == 0){
return 0;
} else {
int number;
doublesomething(2 , number);
int doubled = doublethis(times - 1);
}
return doubled;
}
就我而言,我认为这是非常错误的。
答案 0 :(得分:1)
我不知道你是否有意解决这个问题,你可以参考一下。
int doublethis(int times){
int result;
if (times == 0){
result = 1;
}
if(times > 0) {
result = 2 * doublethis(times - 1);
}
printf("%d \n", result);
return result;
}
这是一个简单的递归示例,我认为您可以逐步学习算法,并使用图表执行算法的过程。如果您输入时间5,则行为如下:
result5
= 2 * doublethis(4)
= 2 * 2 * doublethis(3)
= 2 * 2 * 2 * doublethis(2)
= 2 * 2 * 2 * 2 * doublethis(1)
= 2 * 2 * 2 * 2 * 2 * doublethis(0)
print result0
print result1
print result2
print result3
print result4
print result5
答案 1 :(得分:0)
您需要某种终止条件,例如:
int f(int n, int x)
{
if (n == 1)
return x;
return n * x + f(n - 1, x);
}
答案 2 :(得分:0)
你不需要递归,但如果你出于某种原因需要它(家庭作业,学习),根据你的代码:
int doublethis(int times, int number) {
if (times <= 0) {
return 0;
} else {
number *= 2;
if((--times) > 0)
number = doublethis(times, number);
return number;
}
}
如果您是肯定的,times
在第一次通话时将始终为1或更多,简化版本:
int doublethis(int times, int number) {
if (times == 1) {
return number;
} else {
return doublethis(times-1, number * 2);
}
}
或者甚至更短:
int doublethis(int times, int number) {
return (times == 1) ? number : doublethis(times-1, number * 2);
}
如果times
为1,则会返回相同的数字...如果您希望在使用times = 1
进行调用时实际加倍,则将times==1
条件更改为{{1} (会更有意义)
答案 3 :(得分:0)
你可以试试这个......
#include <iostream>
using namespace std;
void doublethis(int n,int time)
{
if(time==0)
return;
cout<<" -> " <<n*2;
doublethis(n*2,time-1);
return;
}
int main()
{
int n,time;
cin>>n>>time;
cout<<n ;
doublethis(n,time);
return 0;
}
如果你想要加倍3次,这段代码的输出将是
3 -> 6 -> 12 -> 24 -> 48
答案 4 :(得分:0)
#include <iostream>
using namespace std;
void doubleThis(int num, int until) {
if (until == 0) {
return;
}
num = num * 2;
cout << num << endl;
doubleThis(num, until-1);
}
int main() {
int x;
cout << "Enter the the number to be doubled for next 5 times " << endl;
cin >> x;
cout << "Entered number is " << x << endl;
doubleThis(x, 5);
return 0;
}
对于另外5个数字,它完成了加倍的序列。您可以根据需要修改任意数量的代码。