python遞迴return n1 or n2 and 1 or digui n 1digui n 2 是什麼意思

2021-07-16 08:26:39 字數 3681 閱讀 9972

1樓:第一碗羊雜割

此程式可改寫為:

def digui(n: int) -> int:

if n ==1 or n == 2:

return 1

else:

return digui(n - 1) + digui(n - 2)

對於主程式語句

return (n == 1 or n == 2) and 1 or (digui(n - 1) + digui(n - 2))

來說,它由被or分隔開的兩個語句構成。首先or左邊的語句

return (n == 1 or n == 2) and 1

此語句相當於使用if條件語句做的一個基本條件,即用來終結遞迴語句的進行,防止無限遞迴的發生。相當於:

if n == 1 or n == 2:

return 1

意思是當樓梯只有一層或兩層時,直接輸出1,因為只有一種走法(1層時原地不動,2層時只能向上走一步)。

然後or右邊的語句

or digui(n - 1) + digui(n - 2)

這句中的or相當於if語句中的

else:

即若不屬於

n == 1 or n == 2

的情況時,開始執行如下遞迴步驟,步驟為

digui(n - 1) + digui(n - 2)

這裡要有一個遞迴思想,假設有n階樓梯,走第一步時只有兩種選擇,要麼跨兩階要麼跨一階,那麼:

第一步跨一階:

那麼此時還剩(n - 1)階樓梯,這n - 1階的跨樓方法自然變成digui(n - 1)

第一步跨兩階:

那麼此時還剩(n - 2)階樓梯,這n - 2階的跨樓方法自然變成digui(n - 2)

所以對於n階樓梯來說,總共的跨樓方法是

digui(n - 1) + digui(n - 2)

種。對於n - 1或n - 2級樓梯來說,他們各自又會有

digui(n - 1) + digui(n - 2)   # 注意這裡的n代表的是的n - 1或者n - 2,而不是                               # 最初的n。

種方法,如此迴圈下去,便形成了一個遞迴,直到樓梯數目n減為1或者2時,進入基本條件,遞迴終止。

說句題外話,其實此問題就是一個斐波那契數列的應用,抽象成數學問題就是:

有斐波那契數列 1,1,2,3,5,8,13,21,……  從第三個數開始,每個數都是前兩個數之和,求第n個數的值。

如果變成這樣的問題可能更好思考一些。

2樓:匿名使用者

n級樓梯,第一步可以跨一或二級,還有n-1或n-2級樓梯,總的走法為n-1樓梯的走法加上n-2階樓梯的走法,即digui(n-1)+digui(n-2)

這個程式當n==1或n==2時直接返回1,

return (n == 1 or n == 2) and 1 or (digui(n-1) + digui(n-2))

簡化為a and b or c,當a成立時返回 b的值,(n==1 or n==2)成立時返回1,a and b不成立時返回c的值,(n==1 or n==2)不成立時返回(digui(n-1)+digui(n-2))的值

即def digui(n):

if n == 1 or n == 2:

return 1

else:

return digui(n-1) + digui(n-2)

而且這個程式根本就不對,2級樓梯可以一次走一級,也可以 一次走二級,有兩種走法,這個程式 會返回 1,if n==1 or n==2:retun n 當n=2時會返回2這樣才對

走樓梯應該是從第0級開始,如果一開始就在第一級上就要先減一級print digui(n-1)

計算機程式語言有哪些?

3樓:祕雁汲雲露

答:成千上萬。

最主流:

c++;

最基礎:basic

工程應用:fortran

教學語言:

pascal

新手應該學習什麼程式語言?

4樓:匿名使用者

1.看你的情況說明,建議還是學“易語言”或者vb

2.易語言是中文環境,背後的實質是c語言,vb呢,屬於初學者語言,好入門。

3.”不管c/vb/c++/c#學會之後不都是一樣可以做出軟體嗎?“答案是肯定的。

只要熟練掌握一門語言,都是可以做出軟體的。只不過看你的目的了,若是自己用無所謂,若是但是以此求職謀生,那需要看應聘的單位需要什麼語言了。

5樓:千鋒教育

對於初學者,想做簡單的程式設計的話,建議從c語言開始入門。c語言是最主流的基礎語言。現在軟體開發上所用的的主流的高階程式語言大多數都是以c語言為基礎演化而來的,掌握好c語言有助於學習其他的高階程式語言。

在學習過程中推薦參考譚浩強的c語言教程,非常適合入門級別的教材,在學習中還要注重實際操作,技術的提高來與源於**量的積累。

6樓:匿名使用者

如果你只是打算學來玩玩的話,易語言和vb是最簡單的了,易語言寫遊戲外掛方便。

如果你是認真的話,只推薦你學c或c ,優點有樓下說的,畢竟沒哪個公司開放軟體用易語言的吧,學易語言工作都會找不到。如果你下定了決心的話,那就把全部的精力學c和彙編,把這2個學精通。

7樓:流風

c# 簡單,文件多,開發工具方便

其他語言要麼開發工具麻煩,要麼語言麻煩

計算機程式設計入門應該學什麼語言

8樓:春流婉轉繞芳甸

可以先學習python,這被認為是計算機語言裡比較簡單易懂的語言,可以自學或者搜尋相關課程進行學習。

程式語言一共有多少種?

一般遊戲程式設計用什麼語言和軟體

9樓:安徽新華電腦專修學院

你好,軟體開發不存在好語言或差語言,任何語言都可以,只是存在效率的差別。舉個例子:一個複雜的數**算,人工計算需要100年,而用計算機計算只要1秒鐘,這就是效率的差別。

指令碼語言和程式語言的區別是什麼?

10樓:學雅思

1、指令碼語言:又被稱為擴建的語言,或者動態語言,是一種程式語言,用來控制軟體應用程式。

2、程式語言:一種計算機語言讓程式設計師能夠準確地定義計算機所需要使用的資料,並精確地定義在不同情況下所應當採取的行動。

二、特點不同

1、指令碼語言:指令碼通常以文字(如ascii)儲存,只在被呼叫時進行解釋或編譯。

2、程式語言:程式在執行時可以改變其結構,開發快速,接近自然語言,易於理解,更方便的**管理。

三、優缺點不同

1、指令碼語言:指令碼語言極大地簡化了“開發、部署、測試和除錯”的週期過程。大多數指令碼語言都能夠隨時部署,而不需要耗時的編譯/打包過程。

2、程式語言:任何程式語言的使用都需要確保編寫的程式能夠根據實際需要及時調整。因此,快速原型開發環境非常重要,在這種環境下,動態語言和相關庫的結合可以大大增強其優勢。

最簡單的程式語言是什麼

11樓:源白鶴

其實最簡單的程式語言是scratch,c和vb一點也不簡單

遞迴查詢的向上遞迴和向下遞迴是什麼意思

備忘錄方法是動態規劃方法的變形。與動態規劃演算法不同的是,備忘錄方法的遞迴方式是自頂向下的,而動態規劃演算法則是自底向上的。如 求lcs的問題 當xi yj時,求c i,j 只需知道c i 1,j 1 而無需用到c i,0 c i,j 1 及c i 1,j c i 1,n 當只需求出一個lcs時,可...

Cmap遞迴刪除,C map遞迴刪除,比如map int,int tmpmap

用erase函式。baimap iterator pos for pos tmpmap.begin pos tmpmap.end 還有你du 描述的不對,zhimap的鍵值必須是dao唯一的內,如果不是容可以用multimap include include using namespace std ...

再問遞迴的問題,再問一個遞迴的問題

函式呼叫時,只有被呼叫函式返回,才會繼續執行,就是fn b 1 b賦值c不會立即執行,會壓棧儲存,壓棧時會儲存任何一個變數 符號等等,棧是從高地址往低地址走的,比如先壓入c,再壓入 接著fn b 1 這裡就會進入函式fn,接著從函式開始壓入內容,也就是直到有一個fn返回才會壓入後面的 和b,分析遞迴...