Первичная функция проверки моих показывает 9,15 и т. Д., Как премьер, где они не являются. Мой код:Почему оператор возврата в моей заданной пользователем функции не работает в каком-то случае?
#include<iostream>
#include<cstdio>
using namespace std;
int prime_function(int num, int i);
int main(){
int num,flag=0;
while (cin>>num){
if(num!=1){
flag=prime_function(num,2);
if(flag==0)
printf("%d isn't a prime.\n",num);
else {
printf("%d is a prime.\n",num);
}
}
else {
printf("%d is a prime.\n",num);
}
}
return 0;
}
int prime_function(int num, int i)
{
if(num%i==0){
printf("when num mod i == 0, num=%d i=%d\n",num,i);
return 0;//This Statement doesn't work for like num=9,15...
}
else if((i*i)+1<=num){
printf("when num mod i != 0, num=%d i=%d\n",num,i);
prime_function(num,++i);
}
printf("Going to main function.\n");
return 1;
}
Я сделал код довольно много графическим, чтобы ошибки можно было легко найти. Когда я ввожу 9, моя программа показывает:
when num mod i != 0, num=9 i=2
when num mod i == 0, num=9 i=3
Going to main function.
Going to main function.
9 is a prime.
Он должен печатать «Переход к основной функции». один раз, а затем перейти к основной функции. Но он не выполняет и не проходит через всю функцию, а затем переходит к основной функции. Может ли кто-нибудь помочь мне с этой проблемой?
Он отлично работает, но вы можете объяснить, как он решает мою проблему? –
@AhashanAlamSojib, потому что так работает рекурсия. Я предлагаю рассмотреть более простой пример, например. вычисление factorial: 'int fac (int i) {return (i == 1)? (1) :(i * fac (i-1));}' – user463035818
Да, я использовал назначение прямого возврата для факториальных функций. Наверное, я был в замешательстве о вызове функции из возвращения. Спасибо @AlanStokes ... –