簡體   English   中英

使用遞歸反轉數字

[英]Reverse of a number using recursion

數字的背面被打印了很多次。 我如何只打印一次?

例如,如果我輸入1234 ,則 output 輸出為4321 4321 4321 4321

#include <stdio.h>
#include <stdlib.h>

//function declaration
void printReverse(int);

int main()
{
    int n;
    printf("\n\t\t\t\t\t\tThis program prints reverse of a given number");
    printf("\nEnter a number: ");
    scanf("%d",&n);

    //if someone enters 0
    if(n==0)
    {
        printf("%d",n);
        exit(0);
    }
    //function call
    printReverse(n);
    
    return 0;
}

void printReverse(int n)
{
    static int rev=0; 
    
    //base case
    if(n) 
    {
        int rem = n % 10;      
        rev = rev*10 + rem; 
        printReverse(n/10); 
    }
    printf("%d ",rev);
    
    
}

當前編寫printReverse function 的方式,最后一行( printf("%d ",rev); )將始終在調用 function 時執行,因為沒有通過跳過該行的 function 的代碼路徑。 因此,當遞歸到達給定參數為零的點時,您將在每次堆疊遞歸調用的“倒帶”時調用該行(初始n中的每個數字一次)。

要解決此問題,您可以將printf行包含在else塊中:

void printReverse(int n)
{
    static int rev = 0;
    if (n) {
        int rem = n % 10;
        rev = rev * 10 + rem;
        printReverse(n / 10);
    }
    else { // Only print the result when we're finished (n = 0):
        printf("%d\n", rev);
    }
}

或者,完成幾乎相同的事情,在進行遞歸調用后添加一個return語句:

void printReverse(int n)
{
    static int rev = 0;
    if (n) {
        int rem = n % 10;
        rev = rev * 10 + rem;
        printReverse(n / 10);
        return; // Don't print on the rewind from recursion
    }
    printf("%d\n", rev);
}

C 使用遞歸反轉給定數字的程序 function

基於https://beginnersbook.com/2014/06/c-program-to-reverse-a-given-number-using-recursive-function/

#include <stdio.h>

int sum=0, rem;

int reverse_function(int num) {
  if(num) {
    rem=num%10;
    sum=sum*10+rem;
    reverse_function(num/10);
  }
  else
    return sum;
  return sum;
}

int main() {
  int num,reverse_number;

  //Take the number as an input from user
  printf("Enter any number:");
  scanf("%d",&num);

  //Calling user defined function to perform reverse
  reverse_number=reverse_function(num);
  printf("The reverse of entered number is :%d",reverse_number);
  return 0;
}

Output:

在此處輸入圖像描述

暫無
暫無

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

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