當前位置:首頁 » 編程語言 » 遞歸演算法c語言求第30位數
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

遞歸演算法c語言求第30位數

發布時間: 2022-06-01 17:47:29

⑴ 用c#遞歸方法算出斐波那契數列第30位是什麼數字

static void Main(string[] args)
{
Test2 t = new Test2();
t.math();
}
}
class Test2
{
public void math()
{
int num1 = 1, num2 = 1;

int num = num1 + num2;
Console.WriteLine(" " + num1 + " " + num2 + " " + num);//輸出頭3個的值 1,1,2

//從第4個值開始循環到第30位
for (int i = 3; i < 30; i++)
{
int num3 = num + num2;
num2 = num;
num = num3;
Console.WriteLine("第{0}位,值:{1}", i + 1, num3);

//輸出5個值後換行
if (i % 5 == 0)
{
Console.WriteLine();

}
}
}

⑵ (C#)遞歸解說

public static int Foo(int i)
{
if (i <= 0)
return 0; // 小於0 的返回0
else if(i > 0 && i <= 2)
return 1; // 前兩位數都是1
else return Foo(i -1) + Foo(i - 2); // 從第三位數開始
等於前兩位的和,如果i-1位數是第一位或者第二位數就返回1 如果不是繼續返回為前兩位的和一直到是1為止,然後依次將其後的一個數算出來,最終算到你設置的地方 第30個數字。

我的理解是 調用這個方法運算到這的時候如果需要遞歸,就再次調用自己,其實你最初調用的方法就一直停在了 else return Foo(i -1) + Foo(i - 2);
這個位置,新調用的方法也是這么算 如果到了這里else return Foo(i -1) + Foo(i - 2); 也是停在這繼續再調用這個方法,知道不再調用了,再一步步的返回一個值,直到你第一次調用的地方,就把你要的值求出來了

遞歸嘛,可以看做第一次到這就停了,這個數再用這個方法去算,一層層的算下去直到出來數字1就是這個方法到不了這,而是直接返回一個數的時候,在一層層的倒退算回去,最終就算到你第一次調用的時候了,也就是30的時候
}
}
i30=i29+i28
i29=i28+i27 i28=i27+i26
i28=i27+i26 i27=i26+i25 i27=i26+i25 i26=i25+i24
....
.....
......
i3=i2+i1=1+1=2 ......

⑶ 看不懂,請解釋一下這個常見遞歸演算法。

你這樣看 如果i>=3的時候 Foo(i) = Foo(i -1) + Foo(i - 2);
所以

Foo(30)=Foo(29)+Foo(28)
=Foo(28)+F(27) + Foo(27)+Foo(26)
= --------------------------------
每個步驟都調用函數Foo(i)

就這樣一直分支下去 到最後全部變成 Foo(0),Foo(1),Foo(2)的相加了,而這3個值已知。所以就得出到案了,當然這是電腦的事,你理解就行

⑷ 一列數的規則如下: 1、1、2、3、5、8、13、21、34...... 求第30位數是多少, 用遞歸演算法實現(C#編寫)。

這個就是斐波那契數列。
遞歸就像遞推,跟數學上的遞推很相似。
「又一層層代回去,最後加出正確答案」
這句話的意思是,比如算Foo(5)
(a) Foo(5) = Foo(4)+Foo(3)

(b) Foo(4) = Foo(3)+Foo(2)
(c) Foo(3) = Foo(2)+Foo(1) = 1 + 1 = 2;

然後把(c)的結果代入到(b)中,
(b) Foo(4) = Foo(3)+Foo(2) = 2 + 1 = 3
然後把(b)和(c)的結果代入到(a)中,

(a) Foo(5) = Foo(4)+Foo(3) = 3 + 2 = 5

最後得到Foo(5)
兩次代入就是所說的一層層代回去

⑸ 一列數的規則如下: 1、1、2、3、5、8、13、21、34求第30位數是多少, 用遞歸演算法實現。答案是這個嗎

設這個數列是{a(n)}
就是設a(1)=1;a(2)=1;a(3)=2;a(4)=3;a(5)=5;a(6)=8;...
遞推關系是:a(n)=a(n-1)+a(n-2)(n≥3);a(1)=a(2)=1;
也就是說:
a(3)=a(2)+a(1)=1+1=2;
a(4)=a(3)+a(2)=2+1=3;
a(5)=a(4)+a(3)=3+2=5;
...
通項公式是:a(n)=[(1+√5)/2]^n/√5-[(1-√5)/2]^n/√5
然後你把30帶進去,就可以啦。
是可以用遞歸來算。如果你過程沒問題,答案就對了。

⑹ 遞歸演算法,計算數組{1,1,2,3,5,8.......} 求第30位值 .明明沒有循環為何自動循環

這不是循環,這是遞歸調用。當調用參數i>2時,就發生遞歸調用。

⑺ 一列數字的規則如下;1,1,2,3,5,8,13,21,34........ 求第30位數字是多少,用遞歸演算法實現

#include <stdio.h>
#include <stdlib.h>
#define N 30
int main(void)
{
int Fib[N] = {0};
int i;
Fib[0] = 0;
Fib[1] = 1;
for(i = 2; i < N; i++)
Fib[i] = Fib[i-1] + Fib[i-2];
for(i = 0; i < N; i++)
printf("%d ", Fib[i]); printf("\n");
return 0; }

⑻ 列數的規則如下: 1、1、2、3、5、8、13、21、34...... 求第30位數是多少, 用遞歸演算法實現。

這個不是斐波那契數列嗎

#include <stdio.h>

int Fibonacci(int n)
{
if( n == 1 || n == 2)
return 1;
else
return Fibonacci(n-1)+Fibonacci(n-2);
}

int main()
{
int n;

printf("please input n: ");
scanf("%d",&n);

printf("Result: %d\n",Fibonacci(n));
return 0;
}

⑼ 一列數的規則如下: 1、1、2、3、5、8、13、21、34...... 求第30位數是多少, 用遞歸演算法實現。

代碼如下:

public class Test {

public static void main(String[] args) {

System.out.println("結果是:"+Test.foo(30));

}

/**

* 常見解法

*/

public static int foo(int i){

int a=1,b=1;

int c=0;

for(int k=2;k<i;k++){//注意循環次數

c=a+b;

a=b;//注意這句要放在b=c之前

b=c;

}

return c;

}

}

(9)遞歸演算法c語言求第30位數擴展閱讀

遞歸思想的內涵:

遞歸就是有去(遞去)有回(歸來)。「有去」是指:遞歸問題必須可以分解為若干個規模較小,與原問題形式相同的子問題,這些子問題可以用相同的解題思路來解決,就像上面例子中的鑰匙可以打開後面所有門上的鎖一樣。

「有回」是指 : 這些問題的演化過程是一個從大到小,由近及遠的過程,並且會有一個明確的終點(臨界點),一旦到達了這個臨界點,就不用再往更小、更遠的地方走下去。最後,從這個臨界點開始,原路返回到原點,原問題解決。

更直接地說,遞歸的基本思想就是把規模大的問題轉化為規模小的相似的子問題來解決。特別地,在函數實現時,因為解決大問題的方法和解決小問題的方法往往是同一個方法,所以就產生了函數調用它自身的情況,這也正是遞歸的定義所在。

格外重要的是,這個解決問題的函數必須有明確的結束條件,否則就會導致無限遞歸的情況。

⑽ 面試題遞歸演算法

我來這么解釋把 當你激活了程序Foo(30) 。那麼根據程序 i=30;即不<=0 也不<=2,那麼他就走 Foo(i -1) + Foo(i - 2);
那i-1 跟 i-2 是什麼東西的呢,那就是F(29)+F(28);
同理F(29) 怎麼拆呢?。。依次照F(30)的方式下去。當遇到F(2)的時候,程序判斷 返回一個1,那麼最後由N多的1組織一步步返回,最後得到F(30)