'Multiply two numbers through recurssion

 #include<iostream>
using namespace std;
int multiply (int num1, int num2){

if (num1 > 0)

  return num2 + multiply(num1-1,num2);


}

int main(){

int mult = multiply(5,6);
cout<<mult;
}

I am trying to multiply two numbers through recurssion, but i am not getting the desired result, i want to print 30 but it is given me 36, i am unable to dry run it and make it's tree diagram



Solution 1:[1]

The problem in your code is that you haven't defined what happens when num1 becomes zero. You have to define this case in your recursive function too.

#include<iostream>

int multiply (int num1, int num2)
{
    
    if (num1 > 0)
        return num2 + multiply(num1 - 1, num2);

    if(num1 <= 0) // or if (num1 == 0) or simply return 0; as pointed out by MikeCAT's answer
        return 0;
}
    
int main()
{
    std::cout << multiply(5, 6);
}

Also see this question:Why is “using namespace std;” considered bad practice?

Solution 2:[2]

This code is for those who are looking for the same logic but in JAVA.

    import java.util.*;

    public class Main {

      public static void main(String[] args) {
        Scanner scn = new Scanner(System.in);
        int n = scn.nextInt();
        int m = scn.nextInt();
        int prod = multiplier(n, m);
        System.out.println(prod);
      }

      public static int multiplier(int n, int m) {
        if(m == 0) {
          return 0;
        }
        int nm1 = multiplier(n, m-1);
        int product = n + nm1;
        return product;
      }
    }

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 dark_prince
Solution 2 iminiki