останавливает ли cout перед возвратом оператор рекурсивной функции? - PullRequest
0 голосов
/ 19 октября 2018

Здесь оператор return не получает вызова, если я вызываю функцию cout до этого.

int factorial(int n){
 if(n>=2)
   cout<<"number of times the function called: "<<endl;
 return n*factorial(n-1);
       }

Я ожидаю, что в последнем случае должно возвращаться значение кода дыры

#include<iostream>
#include<stdio.h>
using namespace std;
int factorial(int n){
  if(n>=2)

  cout<<"number of times the loop executed: "<<n-1 <<endl;
   return n*factorial(n-1);

   }
  int main(){
  int number;
  cout<<"enter the number whose factorial is to be calculated..:"<<endl;
  cin>>number;
  int result=factorial(number);
  cout<<"factorial is: "<<result<<endl;
   }

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Вы должны прекратить свою рекурсию примерно так:

return (n == 0 || n == 1) ? 1 : n*factorial(n-1);
0 голосов
/ 19 октября 2018

Тело if -статмента может быть либо составным оператором, представляющим собой список операторов, окруженный {}, либо это одиночный оператор после if 'sсостояние.Это означает, что этот код:

if(n>=2)
    cout<<"number of times the function called: "<<endl;
    return n*factorial(n-1);

полностью эквивалентен:

if(n>=2){
    cout<<"number of times the function called: "<<endl;
}
return n*factorial(n-1);

Возможно, вы предполагали следующее:

int factorial(int n){
    if(n>=2){
        cout<<"number of times the function called: "<<endl;
        return n*factorial(n-1);
    }
    return 1; // you should ALWAYS return something from a non-void function
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...