2016-11-27 71 views
-1

我有個任務,使該會寫一個方程式的100個數字的代碼遞歸解決(或函數,我不知道這是什麼)數學公式中C++

A(n) = (A(n-1))^2 -n*A(n-2) where A(1) = 1 and A(2) = 1

它必須遞歸解決。我寫了這個代碼到目前爲止

#include <iostream> 
using namespace std; 

int rekurzija(int n){ 
    if(n=1){ 
     return 1; 
    } 
    if(n=2){ 
     return 1; 
    } 
    if(n>2){ 
     return rekurzija(n-1)*rekurzija(n-1)-n*rekurzija(n-2); 
    } 
} 

int main(){ 
    for(int n=1;n<101;n=n+1){ 
     cout << rekurzija(n) << endl; 
    } 
} 

的問題是,程序返回1百倍,而不是1,1,-2,0,...(而不是實際解決此功能)。這段代碼有什麼問題?

+0

不是你的問題的根源,但你***真的不想調用函數兩次來完成平方。調用一次,將結果存儲在'result'中,然後使用'result * result'。你的CPU會感謝你。 – pjs

回答

6

您正在使用simple assignment operator=代替Is equals to relational operator==rekurzija()功能if條件

if(n = 1) //here `n = 1`is an assignment statement 
{ 
    //something... 
} 

如果使用=代替==會發生什麼?

如果賦值語句中的賦值爲非零數字,則if條件將始終評估爲true

注意:零的賦值語句是false即,爲if(n = 0)if塊將不被輸入。您的代碼中沒有任何這樣的if塊。

所以你的第一個if總是評價爲true因爲你分配一個非零值即,1,因此你的函數總是返回1。這就是爲什麼你得到100 1的答案。

所以,而是嘗試所有的if條件改變的東西,如:

if(n == 1) 
{ 
    //something... 
} 

這將檢查是否n是等於1與否。如果n等於1則輸入if塊,否則將不會輸入if塊並檢查下一個if條件。


注:只要記住這一點的同時使用===運營商

  • =分配
  • ==比較
0

當你比較C++的事情,你需要做的是這樣的:

if (a == b) 

,而不是

if (a = b) 

後者將指派B到A和返回的值。