What's the problem with this recursive case? [closed] - c++

Closed. This question is not reproducible or was caused by typos. It is not currently accepting answers.
This question was caused by a typo or a problem that can no longer be reproduced. While similar questions may be on-topic here, this one was resolved in a way less likely to help future readers.
Closed 2 years ago.
Improve this question
guys I faced a problem with the recursive case of a power of a number given its base and exponent. Why is it not working properly and returns 0 everytime?
#include <bits/stdc++.h>
using namespace std;
int qn(int n,int q)
if(q==1)
return 0;
return n*qn(n,q-1);
}
int main() {
cout << qn(2,2);
}

You return 0 at the end of the recursion, and multiply with that value. Will always yield 0.

Seriously, this is very easy to figure out using only a pencil and some paper.
qn(2, 2) called
q is 2 so you execute n * qn(n, q - 1)
Replacing values you have 2 * qn(2, 1)
qn(2, 1) called
q is 1, so if (q == 1) is true
thus 0 is returned
You remplace qn(2, 1) by 0 in 2 * qn(2, 1)
You have 2 * 0
That give 0
If you use a debugger, this is even easier as you can execute the program step by step and simply note everythings it does.
By the way, as written, your code would not even compile because an opening { is missing after int qn(int n,int q).

Related

Why 2 is not showing prime? [closed]

Closed. This question is not reproducible or was caused by typos. It is not currently accepting answers.
This question was caused by a typo or a problem that can no longer be reproduced. While similar questions may be on-topic here, this one was resolved in a way less likely to help future readers.
Closed 4 months ago.
Improve this question
#include <iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int i = 2;
while(i<n){
if(n%i==0){
cout<<"not Prime";
break;
}else{
cout<<"Prime";
break;
}
i++;
}
return 0;
}
This code is written for showing prime or composite/notPrime numbers but 2 is prime & why it is not showing in output?
I write this code for getting for identifying that given number is prime or not. It can work on any number/digit but it can't show about "2" . So why is it?
Because 2 is special number it's even prime and you have to add special case for 2.
for more info: https://mathworld.wolfram.com/EvenPrime.html#:~:text=The%20unique%20even%20prime%20number,%22oddest%22%20prime%20of%20all.
Your program will not work for 2 because the condition goes false and it will never enter to the loop!
Update
Look here for primality test
https://en.wikipedia.org/wiki/Miller%E2%80%93Rabin_primality_test

Strongest Neighbour question in GeekForGeeks [closed]

Closed. This question is not reproducible or was caused by typos. It is not currently accepting answers.
This question was caused by a typo or a problem that can no longer be reproduced. While similar questions may be on-topic here, this one was resolved in a way less likely to help future readers.
Closed 1 year ago.
Improve this question
Input:
n = 6
arr[] = {1,2,2,3,4,5}
Output: 2 2 3 4 5
Explanation: Maximum of arr[0] and arr[1]
is 2, that of arr[1] and arr[2] is 2, ...
and so on. For last two elements, maximum
is 5.
A standard array problem and I know the right solution to it too but I tried using the max() function in the C++ std library and I'm getting this
For Input:
6
1 2 2 3 4 5
your output is:
22345
This is how my function looks like
void maximumAdjacent(int sizeOfArray, int arr[]){
for (int i = 0; i<sizeOfArray-1; i++) {
cout << std::max(arr[i+1], arr[i]) << "";
}
}
On submission this answer isn't accepted and I can't seem to figure out why?
This might be a dumb answer but it looks like you are missing spaces between the numbers. I see the "" in your string and you might need a " " instead. Without the space, it is one giant number. Does that help?

Problem in Finding Prime Numbers between Two numbers [closed]

Closed. This question is not reproducible or was caused by typos. It is not currently accepting answers.
This question was caused by a typo or a problem that can no longer be reproduced. While similar questions may be on-topic here, this one was resolved in a way less likely to help future readers.
Closed 2 years ago.
Improve this question
I have to find all prime numbers between two given numbers(given in ascending order i.e small, large) I made logic such that my program starts from the given least number till the given most numbers and find factors for each number in between, if factors count are 2 i.e 1 and itself(which is a condition for a prime number), hence it is printed as prime. However I am unable to print my desired output.. can't track why(P.S I am 19 years old newbie in Programming)
#include <iostream>
using namespace std;
int main(){
int start,end;
cin>>start,end;
for(int i=start+1;i<end;++i){
int count;
for(int j=1;j<=i;++j){
if(i%j==0 || i/2==0)count++;
}
if(count==2) cout<<i<<endl;
}
return 0;
}
Input: 1 10
Expected Output:
2
3
5
7
9
Output: (nothing)
Your program has several issues.
cin>>start,end; is not going to read in 2 numbers. You need cin >> start >> end;
You are not initializing count to anything, so you invoke undefined behavior when you do count++. You need to do int count = 0;
Also, when checking if n is prime, you don't need to check for divisibility by 1 or n since this is always true.

"while" loop not ending when it should [closed]

Closed. This question is not reproducible or was caused by typos. It is not currently accepting answers.
This question was caused by a typo or a problem that can no longer be reproduced. While similar questions may be on-topic here, this one was resolved in a way less likely to help future readers.
Closed 8 years ago.
Improve this question
Here's the very basic code. The loop will start, even if the condition is false, and it won't end.
int oldpick = 6;
int pick = rand() % 5;
while (pick = oldpick){
pick = rand() % 5;
}
pick = oldpick
This assignes the value of oldpick to pick, and then enters the loop. I think you wanted ==
while (pick == oldpick){
Also, this line:
pick = rand() % 5;
will not give a number higher than 4, so the condition could never be realised, even with ==
All of this could have been seen if warnings had been activated when compiling.
You have a simple typographical error in your while loop condition...
while (pick = oldpick) should be while (pick == oldpick) for equals or while (pick != oldpick) for not equals.
Plus, pick will never ever equal 6 as 6 % 5 == 5

Recursion Help Please [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 8 years ago.
Improve this question
I am trying to figure out the following problem for an upcoming test. I have searched everywhere, and I understand the basics of recursion. What I don't understand for this particular question is the value of int n and int k respectively. I have the answer to this question as it is a practice question, but I have no idea how the answer was found.
// Precondition: n and k are non-negative integers
int f(int n, int k) {
if (k * n == 0)
return 1
else
return f(n - 1, k - 1) + f(n - 1, k)
}
What value is returned by the call f(4, 2)?
Just look at how it's called.
f(4,2) goes into 2nd block, calls f(3,1)+f(3,2)
f(3,1) calls f(2,0)+f(2,1) = 1+f(1,0)+f(1,1)=1+1+f(0,0)+f(0,1)=1+1+1+1=4
f(3,2) calls f(2,1)+f(2,2)= f(1,0)+f(1,1)+f(1,1)+f(1,2) and so on.
You should be able to work it out from here.
I am not sure what the problem is since
f(4,2)=f(3,1) + f(3,2)
=(f(2,0)+f(2,1) )+ (f(2,1) +f(2,2))
=(1 +(f(1,0)+f(1,1))+((f(1,0)+f(1,1))+(f(1,1)+f(1,2))
=(1 + 1 +(1+1)) +( 1 +(1+1) + (1+1) +1 + 1 ))
=11