簡體   English   中英

在C ++中使用遞歸將數字加倍

[英]Double a number using Recursion in C++

我在弄清楚如何使用遞歸將數字加倍時遇到麻煩,問題是該函數必須靈活,必須能夠調用將數字加倍然后再將結果加倍並繼續下去,直到停止為止。 例如說,每當您戳一次粘液時,它就會分解為2個,我需要以某種方式使用遞歸來表示此粘稠度(1-> 2-> 4-> 8-> 16),但是我一直在努力地碰壁很好地了解遞歸。

我從類似的東西開始

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;
}

就我所知,這是極其錯誤的。

我不知道您是否打算解決此問題,您可以參考。

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

您需要某種終止條件,例如:

int f(int n, int x)
{
    if (n == 1)
        return x;

    return n * x + f(n - 1, x);
}

您不需要為此進行遞歸,但是如果出於某種原因(作業,學習)需要,則根據您的代碼進行遞歸:

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條件更改為times==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
#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個以上的數字完成了no翻倍的序列。 您可以根據需要修改任意數量的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM