If we take a look at this problem carefully, we can see that the idea of “loop” is to track some counter value, e.g., “i = 0” till “i <= 100”. So, if we aren’t allowed to use loops, how can we track something in the C language?
Well, one possibility is the use of ‘recursion’, provided we use the terminating condition carefully. Here is a solution that prints numbers using recursion.
Method-1:
C++
#include <iostream>
using namespace std;
class gfg
{
public :
void printNos(unsigned int n)
{
if (n > 0)
{
printNos(n - 1);
cout << n << " " ;
}
return ;
}
};
int main()
{
gfg g;
g.printNos(100);
return 0;
}
|
C
#include <stdio.h>
void printNos(unsigned int n)
{
if (n > 0)
{
printNos(n - 1);
printf ( "%d " , n);
}
return ;
}
int main()
{
printNos(100);
getchar ();
return 0;
}
|
Java
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
class GFG
{
static void printNos( int n)
{
if (n > 0 )
{
printNos(n - 1 );
System.out.print(n + " " );
}
return ;
}
public static void main(String[] args)
{
printNos( 100 );
}
}
|
Python3
def printNos(n):
if n > 0 :
printNos(n - 1 )
print (n, end = ' ' )
printNos( 100 )
|
C#
using System;
class GFG
{
static void printNos( int n)
{
if (n > 0)
{
printNos(n - 1);
Console.Write(n + " " );
}
return ;
}
public static void Main()
{
printNos(100);
}
}
|
PHP
<?php
function printNos( $n )
{
if ( $n > 0)
{
printNos( $n - 1);
echo $n , " " ;
}
return ;
}
printNos(100);
?>
|
Javascript
<script>
function printNos(n)
{
if (n > 0)
{
printNos(n - 1);
document.write(n + " " );
}
return ;
}
printNos(100);
</script>
|
Output1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
Time Complexity: O(n)
Auxiliary Space: O(n)
Method 2:
C++
#include <bits/stdc++.h>
using namespace std;
void printNos( int initial, int last)
{
if (initial <= last) {
cout << initial << " " ;
printNos(initial + 1, last);
}
}
int main()
{
printNos(1, 100);
return 0;
}
|
Java
import java.io.*;
class GFG {
public static void main(String[] args)
{
printNos( 1 , 100 );
}
public static void printNos( int initial, int last)
{
if (initial <= last) {
System.out.print(initial + " " );
printNos(initial + 1 , last);
}
}
}
|
Python3
def printNos(initial, last):
if (initial< = last):
print (initial)
printNos(initial + 1 ,last)
printNos( 1 , 10 )
|
C#
using System;
public class GFG {
public static void Main(String[] args)
{
printNos(1, 100);
}
public static void printNos( int initial, int last)
{
if (initial <= last) {
Console.Write(initial + " " );
printNos(initial + 1, last);
}
}
}
|
Javascript
printNos(1, 100);
function printNos(initial, last)
{
if (initial <= last) {
document.write(initial + " " );
printNos(initial + 1, last);
}
}
|
Output1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
Time Complexity : O(n)
Auxiliary Space: O(n)
Method 3: Using a MACRO
C++
#include <iostream>
using namespace std;
#define COUT(i) cout << i++ << " ";
#define LEVEL(N) N N N N N N N N N N
#define PRINT(i) LEVEL(LEVEL(COUT(i))); // 100 = 10×10
int main()
{
int i = 1;
PRINT(i);
return 0;
}
|
Output1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
Now try writing a program that does the same but without any “if” condition.
Hint : use some operator which can be used instead of “if”.
Please note that the recursion technique is good, but every call to the function creates one “stack-frame” in the program stack. So if there’s a constraint to the limited memory and we need to print a large set of numbers, “recursion” might not be a good idea. So what could be the other alternative?
Another alternative is the “goto” statement. Though use of “goto” is not suggested as a general programming practice as the “goto” statement changes the normal program execution sequence, in some cases, use of “goto” is the best working solution.
So please give a try to printing numbers from 1 to 100 with the “goto” statement. You can use the GFG IDE!
Print 1 to 100 in C++, without loop and recursion
Please Login to comment...