簡體   English   中英

如何使用函數式編程進行遞歸 function?

[英]How to do a recursive function with functional Programming?

我開始學習 C++ 並且我必須做一個程序來計算二項式系數,但它必須是遞歸的。 我只被允許使用函數式編程。 我已經寫了一些可以編譯的東西,但是答案不對。 我不知道該怎么辦。 (我認為我不應該使用我使用的階乘 function)。

這是我得到的:

#include <iostream> 
#include "fcpp.hh"

int fak(int m){
    
    return cond(m==0, 1, m*fak(m-1));
    }

int binomial (int n, int k){
    
    return cond(k==0 || k==n, 1,cond(0<k && k<n,(fak(n-1)/fak(k-1)*fak((n-1)-(k-1)))+binomial(n-2,k) ,0));
}



int main(int argc, char *argv[]) {
    
    int x,y;
    
    std::cout <<"Geben sie zwei Werte, um den Binomialkoeffizient B(n,k) zu berechnen"<< std::endl;
    std::cout <<"Den ersten Wert 'n':" << std::flush; 
    x = enter_int();
    std::cout <<"Den zweiten Wert 'k':" << std::flush; 
    y = enter_int();
    
    print(binomial(x,y));
    
    return (0);
    }

功能說明:

cond(a,b,c) ( (a)? (b): (c) )

  • 在這種情況下,如果參數 a 為真,則轉到 b,否則,轉到 c。
int enter_int ()
  {
    int x;
    std::cin >> x;
    return x;
  }

你不需要階乘,你需要一個不同的二項式系數定義(你的看起來一點也不熟悉)。

二項式系數滿足

binomial(n, 0) == 1
binomial(n, n) == 1
binomial(n, k) == binomial(n-1, k) + binomial(n-1, k-1)

那是,

int binomial (int n, int k)
{
    return (k == 0 || k == n)
          ? 1
          : binomial(n-1, k) + binomial(n-1, k-1);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM