📌  相关文章
📜  递归程序打印所有小于N的数字,仅由数字1或3组成

📅  最后修改于: 2021-04-29 07:31:03             🧑  作者: Mango

给定一个整数N ,任务是打印所有数字≤N ,这些数字的位数只有13

例子:

方法:

  • 首先检查该数字是否大于0。如果是,则继续操作,否则程序终止。
  • 检查数字的每个位置是否存在数字1或3。
  • 如果我们在数字的每个位置都找到1或3,则打印数字。现在,使用递归调用来检查下一个数字,该数字比当前数字小一。

下面是上述方法的实现:

C++
// C++ implementation of the approach
#include 
using namespace std;
  
// Recursive function to print the desired numbers
void printNumbers(int N)
{
  
    // Bool variable to track whether each digit of
    // the number fulfills the given condition
    bool flag = 1;
  
    // Creating a copy of the number
    int x = N;
  
    // Checking if the number has a positive value
    if (N > 0) {
  
        // Loop to iterate through digits
        // of the number until every digit
        // fulfills the given condition
        while (x > 0 && flag == 1) {
  
            // Get last digit
            int digit = x % 10;
  
            // Updating value of flag to be 0 if
            // the digit is neither 1 nor 3
            if (digit != 1 && digit != 3)
                flag = 0;
  
            // Eliminate last digit
            x = x / 10;
        }
  
        // If N consists of digits 1 or 3 only
        if (flag == 1)
            cout << N << " ";
  
        // Recursive call for the next number
        printNumbers(N - 1);
    }
}
  
// Driver code
int main()
{
    int N = 20;
    printNumbers(N);
    return 0;
}


Java
// Java implementation of the above approach 
  
class GFG 
{
      
    // Recursive function to print the desired numbers 
    static void printNumbers(int N) 
    {
          
        // flag variable to track whether each digit of 
        // the number fulfills the given condition 
        int flag = 1;
  
        // Creating a copy of the number 
        int x = N;
  
        // Checking if the number has a positive value 
        if (N > 0) 
        {
              
            // Loop to iterate through digits 
            // of the number until every digit 
            // fulfills the given condition 
            while (x > 0 && flag == 1) 
            {
                // Get last digit 
                int digit = x % 10;
  
                // Updating value of flag to be 0 if 
                // the digit is neither 1 nor 3 
                if (digit != 1 && digit != 3) 
                {
                    flag = 0;
                }
  
                // Eliminate last digit 
                x = x / 10;
            }
  
            // If N consists of digits 1 or 3 only 
            if (flag == 1) {
                System.out.print(N + " ");
            }
  
            // Recursive call for the next number 
            printNumbers(N - 1);
        }
    }
  
    // Driver code 
    public static void main(String[] args) 
    {
        int N = 20;
        printNumbers(N);
    }
} 
  
// This code is contributed by PrinciRaj1992


Python3
# Python 3 implementation of the approach
  
# Recursive function to print the 
# desired numbers
def printNumbers(N):
      
    # Bool variable to track whether each digit 
    # of the number fulfills the given condition
    flag = 1
  
    # Creating a copy of the number
    x = N
  
    # Checking if the number has a 
    # positive value
    if (N > 0):
          
        # Loop to iterate through digits
        # of the number until every digit
        # fulfills the given condition
        while (x > 0 and flag == 1):
              
            # Get last digit
            digit = x % 10
  
            # Updating value of flag to be 0 if
            # the digit is neither 1 nor 3
            if (digit != 1 and digit != 3):
                flag = 0
  
            # Eliminate last digit
            x = x // 10
  
        # If N consists of digits 1 or 3 only
        if (flag == 1):
            print(N, end = " ")
  
        # Recursive call for the next number
        printNumbers(N - 1)
  
# Driver code
if __name__ == '__main__':
    N = 20
    printNumbers(N)
      
# This code is contributed by
# Surendra_Gangwar


C#
// C# implementation of the above approach 
using System;
  
class GFG 
{ 
    // Recursive function to print the desired numbers 
    static void printNumbers(int N) 
    { 
        // flag variable to track whether each digit of 
        // the number fulfills the given condition 
        int flag = 1; 
      
        // Creating a copy of the number 
        int x = N; 
      
        // Checking if the number has a positive value 
        if (N > 0) 
        { 
            // Loop to iterate through digits 
            // of the number until every digit 
            // fulfills the given condition 
            while (x > 0 && flag == 1) 
            { 
                // Get last digit 
                int digit = x % 10; 
      
                // Updating value of flag to be 0 if 
                // the digit is neither 1 nor 3 
                if (digit != 1 && digit != 3) 
                    flag = 0; 
      
                // Eliminate last digit 
                x = x / 10; 
            } 
      
            // If N consists of digits 1 or 3 only 
            if (flag == 1) 
                Console.Write(N + " "); 
      
            // Recursive call for the next number 
            printNumbers(N - 1); 
        } 
    } 
      
      
    // Driver code 
    public static void Main() 
    { 
            int N = 20; 
            printNumbers(N); 
    }
} 
  
 // This code is contributed by Ryuga


PHP
 0) 
    {
  
        // Loop to iterate through digits
        // of the number until every digit
        // fulfills the given condition
        while ((int)$x > 0 && $flag == 1)
        {
  
            // Get last digit
            $digit = $x % 10;
              
            // Updating value of flag to be 0 
            // if the digit is neither 1 nor 3
            if ($digit != 1 && $digit != 3)
                $flag = 0;
  
            // Eliminate last digit
            $x = $x / 10;
        }
          
        // If N consists of digits 1 or 3 only
        if ($flag == 1)
        {
            echo $N ;
            echo " ";
        }
  
        // Recursive call for the next number
        printNumbers($N - 1);
    }
}
  
// Driver code
$N = 20;
printNumbers($N);
  
// This code is contributed 
// by Arnab Kundu
?>


输出:
13 11 3 1

请注意,本文旨在解释递归解决方案的想法是存在一种更好的方法来解决此问题。我们可以使用队列来有效地解决此问题。有关有效方法的详细信息,请参考小于N的二进制数字计数。

想要从精选的最佳视频中学习并解决问题,请查看有关从基础到高级C++的C++基础课程以及有关语言和STL的C++ STL课程。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”