2012-10-22 25 views
1

我想打一個函數,它會顯示數字1到100和100到1 我很困惑不知道怎麼去使用遞歸做到這一點出發?函數通過使用遞歸?

我不想做到這一點使用任何其他循環。 請給我提示並忽略我的提問方式,因爲我是新的C++和c#。

+3

[你嘗試過什麼(http://whathaveyoutried.com)?你對什麼感到困惑?你堅持什麼?請發佈您的當前代碼。 – Oded

+0

這是功課嗎? –

+0

1-100和100-1具有相同的功能? –

回答

5
void Print100(int n) 
{ 
    if (n > 100) 
    { 
     Console.WriteLine(); // cosmetic 
     return;    // stop recursing 
    } 

    Console.WriteLine(n);  // 1-100 
    Print100(n+1);   // recurse 
    Console.WriteLine(n);  // 100-1, on the way out 
} 


void Main() 
{ 
    Print100(1); 
} 
+0

很少用大邏輯編碼,我無法理解值將如何從100返回到1,因爲沒有代碼? –

+0

這顯示了堆棧和遞歸如何工作。這可能是該練習的目的。問:當執行空的'WriteLine()'時,內存中有多少個名爲'n'的變量?答:101。在轉折點處,所有方法仍然是「活動的」,等待執行第二個'WriteLine(n)'。 –

+0

非常聰明,儘管它不會在頂部打印「100」。 – Rawling

3

打印編號從1到100

private void number(int n) 
     { 
      if (n == 100) 
       return; 
      Response.Write(n + "<br/>"); 
      number(n + 1); 
     } 

電話:

public static void For<T>(
    T initializer, 
    Func<T, bool> condition, 
    Func<T, T> iterator, 
    Action<T> action) 
{ 
    if (!condition(initializer)) return; 
    action(initializer); 
    For(iterator(initializer), condition, iterator, action); 
} 

一到一百:

number(0); 
3

你可以爲執行遞歸

For(1, i => i <= 100, i => i + 1, i => Console.WriteLine(i)); 

作爲練習還剩一百一十個。

+1

這不是遞歸的。 –

+0

不可否認,我剛剛修復了一些錯誤,但這不是遞歸? – Rawling

+0

+1 - 這種做法是漂亮:) –

2

你寫一個函數,採用兩個參數,基本上是:當前數量和方向(向上或向下)。然後,你輸出數量,增加或減少並再次調用同一個函數,你已經達到0.1

0

,直到C#

public void recurseInts(int start, int finish){ 
if(start > finish) return; 
Console.WriteLine(start); 
Console.WriteLine(finish - start); 
recurseInts(start + 1 , finish); 
} 

recurseInts(0,100); 
1

您可以使用C++這樣的功能:

void printNumbers(int number) 
    { 
     if (i >= 1) 
     { 
      // 100 --> 1 
      cout << number << " "; 
      printNumbers(i-1); 
      // 1 --> 100 
      cout << number << " "; 
     } 
    } 

用printNumbers調用你的函數(100)

希望這有助於!

0

我想這是你想要什麼C++

#include <iostream> 
using namespace std; 

void recur(int start, int end,bool asc){ 
    cout << start << endl; 
    if(!asc && start==0)return; 
    if(start == end) asc = false; 
    asc?start++:start--; 
    recur(start, end, asc); 
} 

int main(){ 
    recur(0, 100,true); 
    system("pause"); 
    return 0; 
} 
0

複製該代碼,並提交你的任務:

class Program 
{ 

    public static bool forward = false; 
    public static bool stop = false; 
    static void Main(string[] args) 
    { 
     PrintNumbers(0); 
     Console.ReadLine(); 

    } 

    private static void PrintNumbers(int i) 
    { 
     if (i <= 100 && !forward) 
     { 
      Console.WriteLine(i); 
      if (i == 100) 
      { 
       forward = true; 
      } 
      PrintNumbers(i + 1); 

     } 
     if (i >= 0 && i < 100 && forward && !stop) 
     { 


      Console.WriteLine(i); 

      PrintNumbers(i - 1); 
      if (i==0) 
      { 
       stop = true; 
      } 

     } 

    } 
}